High-performance, superscalar-based computer system with out-of-order instruction execution

ABSTRACT

A high-performance, superscalar-based computer system with out-of-order instruction execution for enhanced resource utilization and performance throughput. The computer system fetches a plurality of fixed length instructions with a specified, sequential program order (in-order). The computer system includes an instruction execution unit including a register file, a plurality of functional units, and an instruction control unit for examining the instructions and scheduling the instructions for out-of-order execution by the functional units. The register file includes a set of temporary data registers that are utilized by the instruction execution control unit to receive data results generated by the functional units. The data results of each executed instruction are stored in the temporary data registers until all prior instructions have been executed, thereby retiring the executed instruction in-order.

CROSS-REFERENCE TO RELATED APPLICATIONS

[0001] This application is a continuation of application Ser. No09/852,293, filed May 10, 2001, pending, which is a continuation ofapplication Ser. No. 09/436,986, filed Nov. 9, 1999, now U.S. Pat. No.6,256,720, which is a continuation of application Ser. No. 09/338,563,filed Jun. 23, 1999, now U.S. Pat. No. 6,038,654, which is acontinuation of application Ser. No. 08/946,078, filed Oct. 7, 1997, nowU.S. Pat. No. 6,092,181, which is a continuation of application Ser. No.08/602,021, filed Feb. 15, 1996, now U.S. Pat. No. 5,689,720, which is acontinuation of application Ser. No. 07/817,810, filed Jan. 8, 1992, nowU.S. Pat. No. 5,539,911, which is a continuation of application Ser. No.07/727,006, filed Jul. 8, 1991, now abandoned. Each of theabove-referenced applications is incorporated by reference in itsentirety herein.

[0002] The present application is related to the following applications,all assigned to the Assignee of the present application:

[0003] 1. High-Performance, Superscalar-Based Computer System withOut-of-Order Instruction Execution and Concurrent Results Distribution,invented by Nguyen et al., application Ser. No. 08/397,016, filed Mar.1, 1995, now U.S. Pat. No. 5,560,032, which is a continuation ofapplication Ser. No. 07/817,809, filed Jan. 8, 1992, which is acontinuation of application Ser. No. 07/727,058, filed Jul. 8, 1991;

[0004] 2. RISC Microprocessor Architecture with Isolated ArchitecturalDependencies, invented by Nguyen et al., application Ser. No.08/292,177, filed Aug. 18, 1994, now abandoned, which is a continuationof application Ser. No. 07/817,807, filed Jan. 8, 1992, which is acontinuation of application Ser. No. 07/726,744, filed Jul. 8, 1991;

[0005] 3. RISC Microprocessor Architecture Implementing Multiple TypedRegister Sets, invented by Garg et al., application Ser. No. 07/726,773,filed Jul. 8, 1991, now U.S. Pat. No. 5,493,687;

[0006] 4. RISC Microprocessor Architecture Implementing Fast Trap andException State, invented by Nguyen et al., application Ser. No.08/345,333, filed Nov. 21, 1994, now U.S. Pat. No. 5,481,685, which is acontinuation of application Ser. No. 08/171,968, filed Dec. 23, 1993,which is a continuation of application Ser. No. 07/817,811, filed Jan.8, 1992, which is a continuation of application Ser. No. 07/726,942,filed Jul. 8, 1991;

[0007] 5. Page Printer Controller Including a Single Chip SuperscalarMicroprocessor with Graphics Functional Units, invented by Lentz et al.,application Ser. No. 08/267,646, filed Jun. 28, 1994, now U.S. Pat. No.5,394,515, which is a continuation of application Ser. No. 07/817,813,filed Jan. 8, 1992, which is a continuation of application Ser. No.07/726,929, filed Jul. 8, 1991; and

[0008] 6. Microprocessor Architecture with a Switch Network for DataTransfer between Cache, Memory Port, and IOU, invented by Lentz et al.,application Ser. No. 07/726,893, filed Jul. 8, 1991, now U.S. Pat. No.5,440,752.

BACKGROUND OF THE INVENTION

[0009] 1. Field of the Invention

[0010] The present invention is generally related to the design of RISCtype microprocessor architectures and, in particular, to RISCmicroprocessor architectures that are capable of executing multipleinstructions concurrently.

[0011] 2. Background

[0012] Recently, the design of microprocessor architectures have maturedfrom the use of Complex Instruction Set Computer (CISC) to simplerReduced Instruction Set Computer (RISC) Architectures. The CISCarchitectures are notable for the provision of substantial hardware toimplement and support an instruction execution pipeline. The typicalconventional pipeline structure includes, in fixed order, instructionfetch, instruction decode, data load, instruction execute and data storestages. A performance advantage is obtained by the concurrent executionof different portions of a set of instructions through the respectivestages of the pipeline. The longer the pipeline, the greater the numberof execution stages available and the greater number of instructionsthat can be concurrently executed.

[0013] Two general problems limit the effectiveness of CISC pipelinearchitectures. The first problem is that conditional branch instructionsmay not be adequately evaluated until a prior condition code settinginstruction has substantially completed execution through the pipeline.

[0014] Thus, the subsequent execution of the conditional branchinstruction is delayed, or stalled, resulting in several pipeline stagesremaining inactive for multiple processor cycles. Typically, thecondition codes are written to a condition code register, also referredto as a processor status register (PSR), only at completion ofprocessing an instruction through the execution stage. Thus, thepipeline must be stalled with the conditional branch instruction in thedecode stage for multiple processor cycles pending determination of thebranch condition code. The stalling of the pipeline results in asubstantial loss of through-put. Further, the average through-put of thecomputer will be substantially dependent on the mere frequency ofconditional branch instructions occurring closely after the conditioncode setting instructions in the program instruction stream.

[0015] A second problem arises from the fact that instructions closelyoccurring in the program instruction stream will tend to reference thesame registers of the processor register file. Data registers are oftenused as the destination or source of data in the store and load stagesof successive instructions. In general, an instruction that stores datato the register file must complete processing through at least theexecution stage before the load stage processing of a subsequentinstruction can be allowed to access the register file. Since theexecution of many instructions require multiple processor cycles in thesingle execution stage to produce store data, the entire pipeline istypically stalled for the duration of an execution stage operation.Consequently, the execution through-put of the computer is substantiallydependent on the internal order of the instruction stream beingexecuted.

[0016] A third problem arises not so much from the execution of theinstructions themselves, but the maintenance of the hardware supportedinstruction execution environment, or state-of-the-machine, of themicroprocessor itself. Contemporary CISC microprocessor hardwaresub-systems can detect the occurrence of trap conditions during theexecution of instructions. Traps include hardware interrupts, softwaretraps and exceptions. Each trap requires execution of a correspondingtrap handling routines by the processor. On detection of the trap, theexecution pipeline must be cleared to allow the immediate execution ofthe trap handling routine. Simultaneously, the state-of-the-machine mustbe established as of the precise point of occurrence of the trap; theprecise point occurring at the conclusion of the first currentlyexecuting instruction for interrupts and traps and immediately prior toan instruction that fails due to a exception. Subsequently, thestate-of-the-machine and, again depending on the nature of the trap theexecuting instruction itself must be restored at the completion of thehandling routine. Consequently, with each trap or related event, alatency is introduced by the clearing of the pipeline at both theinception and conclusion of the handling routine and storage and returnof the precise state-of-the-machine with corresponding reduction in thethrough-put of the processor.

[0017] These problems have been variously addressed in an effort toimprove the potential through-put of CISC architectures. Assumptions canbe made about the proper execution of conditional branch instructions,thereby allowing pipeline execution to tentatively proceed in advance ofthe final determination of the branch condition code. Assumptions canalso be made as to whether a register will be modified, thereby allowingsubsequent instructions to also be tentatively executed. Finally,substantial additional hardware can be provided to minimize theoccurrence of exceptions that require execution of handling routines andthereby reduce the frequency of exceptions that interrupt the processingof the program instruction stream.

[0018] These solutions, while obviously introducing substantialadditional hardware complexities, also introduce distinctive problems oftheir own. The continued execution of instructions in advance of a finalresolution of either a branch condition or register file store accessrequire that the state-of-the-machine be restorable to any of multiplepoints in the program instruction stream including the location of theconditional branch, each modification of a register file, and for anyoccurrence of an exception; potentially to a point prior to the fullycompleted execution of the last several instructions. Consequently, evenmore supporting hardware is required and, further, must be particularlydesigned not to significantly increase the cycle time of any pipelinestage.

[0019] RISC architectures have sought to avoid many of the foregoingproblems by drastically simplifying the hardware implementation of themicroprocessor architecture. In the extreme, each RISC instructionexecutes in only three pipelined program cycles including a load cycle,an execution cycle, and a store cycle. Through the use of load and storedata bypassing, conventional RISC architectures can essentially executea single instruction per cycle in the three stage pipeline.

[0020] Whenever possible, hardware support in RISC architectures isminimized in favor of software routines for performing the requiredfunctions. Consequently, the RISC architecture holds out the hope ofsubstantial flexibility and high speed through the use of a simpleload/store instruction set executed by an optimally matched pipeline.And in practice, RISC architectures have been found to benefit from thebalance between a short, high-performance pipeline and the need toexecute substantially greater numbers of instructions to implement allrequired functions.

[0021] The design of the RISC architecture generally avoids or minimizesthe problems encountered by CISC architectures with regard to branches,register references and exceptions. The pipeline involved in a RISCarchitecture is short and optimized for speed. The shortness of thepipeline minimizes the consequences of a pipeline stall or clear as wellas minimizing the problems in restoring the state-of-the-machine to anearlier execution point.

[0022] However, significant through-put performance gains over thegenerally realized present levels cannot be readily achieved by theconventional RISC architecture. Consequently, alternate, so-calledsuperscalar architectures, have been variously proposed. Thesearchitectures generally attempt to execute multiple instructionsconcurrently and thereby proportionately increase the through-put of theprocessor. Unfortunately, such architectures are, again, subject tosimilar, if not the same conditional branch, register referencing, andexception handling problems as encountered by CISC architectures.

BRIEF SUMMARY OF THE INVENTION

[0023] Thus, a general purpose of the present invention is to provide ahigh-performance, RISC based, superscalar processor architecture capableof substantial performance gains over conventional CISC and RISCarchitectures and that is further suited for microprocessorimplementation.

[0024] This purpose is obtained in the present invention through theprovision of a microprocessor architecture capable of the concurrentexecution of instructions obtained from an instruction store. Themicroprocessor architecture includes an instruction prefetch unit forfetching instruction sets from the instruction store. Each instructionset includes a plurality of fixed length instructions. An instructionFIFO is provided for buffering instruction sets in a plurality ofinstruction set buffers including a first buffer and a second buffer. Aninstruction execution unit, including a register file and a plurality offunctional units, is provided with an instruction control unit capableof examining the instruction sets within the first and second buffersand issuing any of these instructions for execution by availablefunctional units. Multiple data paths between the functional units andthe register file allow multiple independent accesses to the registerfile as necessary for the concurrent execution of the respectiveinstructions.

[0025] The register file includes an additional set of data registersused for the temporary storage of register data. These temporary dataregisters are utilized by the instruction execution control unit toreceive data processed by the functional units in the out-of-orderexecution of instructions. The data stored in the temporary dataregisters is selectively held, then cleared or retired to the registerfile when, and if, the precise state-of-the-machine advances to theinstruction's location in the instruction stream; where all priorin-order instructions have been completely executed and retired.

[0026] Finally, the prefetching of instruction sets from the instructionstore is facilitated by multiple prefetch paths allowing for prefetchingof the main program instruction stream, a target conditional branchinstruction stream and a procedural instruction stream. The targetconditional branch prefetch path enables both possible instructionstreams for a conditional branch instruction, main and target, to besimultaneously prefetched. The procedural instruction prefetch pathallows a supplementary instruction stream, effective for allowingexecution of an extended procedures implementing a singular instructionfound in the main or target instruction streams; the procedural prefetchpath enables these extended procedures to be fetched and executedwithout clearing at least the main prefetch buffers.

[0027] Consequently, an advantage of the present invention is that itprovides an architecture that realizes extremely high performancethrough-put utilizing a fundamentally RISC type core architecture.

[0028] Another advantage of the present invention is that it providesfor the execution of multiple instructions per cycle.

[0029] A further advantage of the present invention is that it providesfor the dynamic selection and utilization of functional units necessaryto optimally execute multiple instructions concurrently.

[0030] Still another advantage of the present invention is that itprovides for a register file unit that integrally incorporates amechanism for supporting a precise state-of-the-machine returncapability.

[0031] Yet another advantage of the present invention is that itincorporates multiple register files within the register file unit thatare generalized, typed and capable of multiple register file functionsincluding operation as multiple independent and parallel integerregister files, operation of a register file as both a floating pointand integer file and operation of a dedicated boolean register file.

[0032] A still further advantage of the present invention is that loadand store operations and the handling of exceptions and interrupts canbe performed in a precise manner through the use of a precisestate-of-the-machine return capability including efficient instructioncancellation mechanisms and a load/store order synchronizer.

[0033] A yet still further advantage of the present invention is theprovision for dedicated register file unit support of trap states so asto minimize latency and enhance processing through-put.

[0034] Yet still another advantage of the present invention is theprovision for main and target branch instruction prefetch queues wherebyeven incorrect target branch stream execution ahead minimally impactsthe overall processing through-put obtainable by the present invention.Further, the procedural instruction prefetch queue allows an efficientmanner of intervening in the execution of the main or target branchinstruction streams to allow the effective implementation of newinstructions through the execution of procedural routines and,significantly, the externally provided revision of procedural routinesimplementing built-in procedural instructions.

BRIEF DESCRIPTION OF THE DRAWINGS/FIGS.

[0035] These and other advantages and features of the present inventionwill become better understood upon consideration of the followingdetailed description of the invention when considered in connection ofthe accompanying drawings, in which like reference numerals designatelike parts throughout the figures thereof, and wherein:

[0036]FIG. 1 is a simplified block diagram of the preferredmicroprocessor architecture implementing the present invention;

[0037]FIG. 2 is a detailed block diagram of the instruction fetch unitconstructed in accordance with the present invention;

[0038]FIG. 3 is a block diagram of the program counter logic unitconstructed in accordance with the present invention;

[0039]FIG. 4 is a further detailed block diagram of the program counterdata and control path logic;

[0040]FIG. 5 is a simplified block diagram of the instruction executionunit of the present invention;

[0041]FIG. 6A is a simplified block diagram of the register filearchitecture utilized in a preferred embodiment of the presentinvention;

[0042]FIG. 6B is a graphic illustration of the storage register formatof the temporary buffer register file and utilized in a preferredembodiment of the present invention;

[0043]FIG. 6C is a graphic illustration of the primary and secondaryinstruction sets as present in the last two stages of the instructionFIFO unit of the present invention;

[0044]FIGS. 7A, 7B and 7C provide a graphic illustration of thereconfigurable states of the primary integer register set as provided inaccordance with a preferred embodiment of the present invention;

[0045]FIG. 8 is a graphic illustration of a reconfigurable floatingpoint and secondary integer register set as provided in accordance withthe preferred embodiment of the present invention;

[0046]FIG. 9 is a graphic illustration of a tertiary boolean registerset as provided in a preferred embodiment of the present invention;

[0047]FIG. 10 is a detailed block diagram of the primary integerprocessing data path portion of the instruction execution unitconstructed in accordance with the preferred embodiment of the presentinvention;

[0048]FIG. 11 is a detailed block diagram of the primary floating pointdata path portion of the instruction execution unit constructed inaccordance with a preferred embodiment of the present invention;

[0049]FIG. 12 is a detailed block diagram of the boolean operation datapath portion of the instruction execution unit as constructed inaccordance with the preferred embodiment of the present invention;

[0050]FIG. 13 is a detailed block diagram of a load/store unitconstructed in accordance with the preferred embodiment of the presentinvention;

[0051]FIG. 14 is a timing diagram illustrating the preferred sequence ofoperation of a preferred embodiment of the present invention inexecuting multiple instructions in accordance with the presentinvention;

[0052]FIG. 15 is a simplified block diagram of the virtual memorycontrol unit as constructed in accordance with the preferred embodimentof the present invention;

[0053]FIG. 16 is a graphic representation of the virtual memory controlalgorithm as utilized in a preferred embodiment of the presentinvention; and

[0054]FIG. 17 is a simplified block diagram of the cache control unit asutilized in a preferred embodiment of the present invention.

DETAILED DESCRIPTION OF THE INVENTION Table of Contents

[0055] I. Microprocessor Architectural Overview

[0056] II. Instruction Fetch Unit

[0057] A. IFU Data Path

[0058] B. IFU Control Path

[0059] C. IFU/IEU Control Interface

[0060] D. PC Logic Unit Detail

[0061] 1. PF and ExPC Control/Data Unit Detail

[0062] 2. PC Control Algorithm Detail

[0063] E. Interrupt and Exception Handling

[0064] 1. Overview

[0065] 2. Asynchronous Interrupts

[0066] 3. Synchronous Exceptions

[0067] 4. Handler Dispatch and Return

[0068] 5. Nesting

[0069] 6. List of Traps

[0070] III. Instruction Execution Unit

[0071] A. IEU Data Path Detail

[0072] 1. Register File Detail

[0073] 2. Integer Data Path Detail

[0074] 3. Floating Point Data Path Detail

[0075] 4. Boolean Register Data Path Detail

[0076] B. Load/Store Control Unit

[0077] C. IEU Control Path Detail

[0078] 1. EDecode Unit Detail

[0079] 2. Carry Checker Unit Detail

[0080] 3. Data Dependency Checker Unit Detail

[0081] 4. Register Rename Unit Detail

[0082] 5. Instruction Issuer Unit Detail

[0083] 6. Done Control Unit Detail

[0084] 7. Retirement Control Unit Detail

[0085] 8. Control Flow Control Unit Detail

[0086] 9. Bypass Control Unit Detail

[0087] IV. Virtual Memory Control Unit

[0088] V. Cache Control Unit

[0089] VI. Summary/Conclusion

[0090] I. Microprocessor Architectural Overview

[0091] The architecture 100 of the present invention is generally shownin FIG. 1. An Instruction Fetch Unit (IFU) 102 and an InstructionExecution Unit (IEU) 104 are the principal operative elements of thearchitecture 100. A Virtual Memory Unit (VMU) 108, Cache Control Unit(CCU) 106, and Memory Control Unit (MCU) 110 are provided to directlysupport the function of the IFU 102 and IEU 104. A Memory Array Unit(MAU) 112 is also provided as a generally essential element for theoperation of the architecture 100, though the MAU 112 does not directlyexist as an integral component of the architecture 100. That is, in thepreferred embodiments of the present invention, the IFU 102, IEU 104,VMU 108, CCU 106, and MCU 110 are fabricated on a single silicon dieutilizing a conventional 0.8 micron design rule low-power CMOS processand comprising some 1,200,000 transistors. The standard processor orsystem clock speed of the architecture 100 is 40 MHz. However, inaccordance with a preferred embodiment of the present invention, theinternal processor clock speed is 160 MHz.

[0092] The IFU 102 is primarily responsible for the fetching ofinstructions, the buffering of instructions pending execution by the IEU104, and, generally, the calculation of the next virtual address to beused for the fetching of next instructions.

[0093] In the preferred embodiments of the present invention,instructions are each fixed at a length of 32 bits. Instruction sets, or“buckets” of four instructions, are fetched by the IFU 102simultaneously from an instruction cache 132 within the CCU 106 via a128 bit wide instruction bus 114. The transfer of instruction sets iscoordinated between the IFU 102 and CCU 106 by control signals providedvia a control bus 116. The virtual address of a instruction set to befetched is provided by the IFU 102 via an IFU combined arbitration,control and address bus 118 onto a shared arbitration, control andaddress bus 120 further coupled between the IEU 104 and VMU 108.Arbitration for access to the VMU 108 arises from the fact that both theIFU 102 and IEU 104 utilize the VMU 108 as a common, shared resource. Inthe preferred embodiment of the architecture 100, the low order bitsdefining an address within a physical page of the virtual address aretransferred directly by the IFU 102 to the Cache Control Unit 106 viathe control lines 116. The virtualizing, high order bits of the virtualaddress supplied by the IFU 102 are provided by the address portion ofthe buses 118, 120 to the VMU 108 for translation into a correspondingphysical page address. For the IFU 102, this physical page address istransferred directly from the VMU 108 to the Cache Control Unit 106 viathe address control lines 122 one-half internal processor cycle afterthe translation request is placed with the VMU 108.

[0094] The instruction stream fetched by the IFU 102 is, in turn,provided via an instruction stream bus 124 to the IEU 104. Controlsignals are exchanged between the IFU 102 and the IEU 104 via controlslines 126. In addition, certain instruction fetch addresses, typicallythose requiring access to the register file present within the IEU 104,are provided back to the IFU via a target address return bus within thecontrol lines 126.

[0095] The IEU 104 stores and retrieves data with respect to a datacache 134 provided within the CCU 106 via an 80-bit wide bi-directionaldata bus 130. The entire physical address for IEU data accesses isprovided via an address portion of the control bus 128 to the CCU 106.The control bus 128 also provides for the exchange of control signalsbetween the IEU 104 and CCU 106 for managing data transfers. The IEU 104utilizes the VMU 108 as a resource for converting virtual data addressinto physical data addresses suitable for submission to the CCU 106. Thevirtualizing portion of the data address is provided via thearbitration, control and address bus 120 to the VMU 108. Unlikeoperation with respect to the IFU 102, the VMU 108 returns thecorresponding physical address via the bus 120 to the IEU 104. In thepreferred embodiments of the architecture 100, the IEU 104 requires thephysical address for use in ensuring that load/store operations occur inproper program stream order.

[0096] The CCU 106 performs the generally conventional high-levelfunction of determining whether physical address defined requests fordata can be satisfied from the instruction and data caches 132, 134, asappropriate. Where the access request can be properly fulfilled byaccess to the instruction or data caches 132, 134, the CCU 106coordinates and performs the data transfer via the data buses 114, 128.

[0097] Where a data access request cannot be satisfied from theinstruction or data caches 132, 134, the CCU 106 provides thecorresponding physical address to the MCU 110 along with sufficientcontrol information to identify whether a read or write access of theMAU 112 is desired, the source or destination cache 132, 134 of the CCU106 for each request, and additional identifying information to allowthe request operation to be correlated with the ultimate data request asissued by the IFU 102 or IEU 104.

[0098] The MCU 110 preferably includes a port switch unit 142 that iscoupled by a unidirectional data bus 136 with the instruction cache 132of the CCU 106 and a bidirectional data bus 138 to the data cache 134.The port switch 142 is, in essence, a large multiplexer allowing aphysical address obtained from the control bus 140 to be routed to anyone of a number of ports P₀-P_(N) 146 _(0-n) and the bidirectionaltransfer of data from the ports to the data buses 136, 138. Each memoryaccess request processed by the MCU 110 is associated with one of theports 146 _(0-n) for purposes of arbitrating for access to the mainsystem memory bus 162 as required for an access of the MAU 112. Once adata transfer connection has been established, the MCU provides controlinformation via the control bus 140 to the CCU 106 to initiate thetransfer of data between either the instruction or data cache 132, 134and MAU 112 via the port switch 142 and the corresponding one of theports 146 _(0-n). In accordance with the preferred embodiments of thearchitecture 100 the MCU 110 does not actually store or latch data intransit between the CCU 106 and MAU 112. This is done to minimizelatency in the transfer and to obviate the need for tracking or managingdata that may be uniquely present in the MCU 110.

[0099] II. Instruction Fetch Unit

[0100] The primary elements of the Instruction Fetch Unit 102 are shownin FIG. 2. The operation and interrelationship of these elements canbest be understood by considering their participation in the IFU dataand control paths.

[0101] A. IFU Data Path

[0102] The IFU data path begins with the instruction bus 114 thatreceives instruction sets for temporary storage in a prefetch buffer260. An instruction set from the prefetch buffer 260 is passed throughan IDecode unit 262 and then to an IFIFO unit 264. Instruction setsstored in the last two stages of the instruction FIFO 264 arecontinuously available, via the data buses 278,280, to the IEU 104.

[0103] The prefetch buffer unit 260 receives a single instruction set ata time from the instruction bus 114. The full 128 bit wide instructionset is generally written in parallel to one of four 128 bit wideprefetch buffer locations in a Main Buffer (MBUF) 188 portion of theprefetch buffer 260. Up to four additional instruction sets may besimilarly written into two 128 bit wide Target Buffer (TBUF) 190prefetch buffer locations or to two 128 bit wide Procedural Buffer(EBUF) 192 prefetch buffer locations. In the preferred architecture 100,an instruction set in any one of the prefetch buffer locations withinthe MBUF 188, TBUF 190 or EBUF 192 may be transferred to the prefetchbuffer output bus 196. In addition, a direct fall through instructionset bus 194 is provided to connect the instruction bus 114 directly withthe prefetch buffer output bus 196, thereby bypassing the MBUF, TBUF andEBUF 188, 190, 192.

[0104] In the preferred architecture 100, the MBUF 188 is utilized tobuffer instruction sets in the nominal or main instruction stream. TheTBUF 190 is utilized to buffer instruction sets fetched from a tentativetarget branch instruction stream. Consequently, the prefetch buffer unit260 allows both possible instruction streams following a conditionalbranch instruction to be prefetched. This facility obviates the latencyfor further accesses to at least the CCU 106, if not the substantiallygreater latency of a MAU 112, for obtaining the correct next instructionset for execution following a conditional branch instruction regardlessof the particular instruction stream eventually selected upon resolutionof the conditional branch instruction. In the preferred architecture 100invention, the provision of the MBUF 188 and TBUF 190 allow theinstruction fetch unit 102 to prefetch both potential instructionstreams and, as will be discussed below in relationship to theinstruction execution unit 104, to further allow execution of thepresumed correct instruction stream. Where, upon resolution of theconditional branch instruction, the correct instruction stream has beenprefetched into the MBUF 188, any instruction sets in the TBUF 190 maybe simply invalidated. Alternately, where instruction sets of thecorrect instruction stream are present in the TBUF 190, the instructionprefetch buffer unit 260 provides for the direct, lateral transfer ofthose instruction sets from the TBUF 190 to respective buffer locationsin the MBUF 188. The prior MBUF 188 stored instruction sets areeffectively invalidated by being overwritten by the TBUF 190 transferredinstruction sets. Where there is no TBUF instruction set transferred toan MBUF location, that location is simply marked invalid.

[0105] Similarly, the EBUF 192 is provided as another, alternateprefetch path through the prefetch buffer 260. The EBUF 192 ispreferably utilized in the prefetching of an alternate instructionstream that is used to implement an operation specified by a singleinstruction, a “procedural” instruction, encountered in the MBUF 188instruction stream. In this manner, complex or extended instructions canbe implemented through software routines, or procedures, and processedthrough the prefetch buffer unit 260 without disturbing the instructionstreams already prefetched into the MBUF 188. Although the presentinvention generally permits handling of procedural instructions that arefirst encountered in the TBUF 190, prefetching of the proceduralinstruction stream is held until all prior pending conditional branchinstructions are resolved. This allows conditional branch instructionsoccurring in the procedural instruction stream to be consistentlyhandled through the use of the TBUF 190. Thus, where a branch is takenin the procedural stream, the target instruction sets will have beenprefetched into the TBUF 190 and can be simply laterally transferred tothe EBUF 192.

[0106] Finally, each of the MBUF 188, TBUF 190 and EBUF 192 are coupledto the prefetch buffer output bus 196 so as to provide any instructionset stored by the prefetch unit onto the output bus 196. In addition, aflow through bus 194 is provided to directly transfer an instruction setfrom the instruction bus 114 directly to the output bus 196.

[0107] In the preferred architecture 100, the prefetch buffers withinthe MBUF 188, TBUF 190, EBUF 192 do not directly form a FIFO structure.Instead, the provision of an any buffer location to output bus 196connectivity allows substantial freedom in the prefetch ordering ofinstruction sets retrieved from the instruction cache 132. That is, theinstruction fetch unit 102 generally determines and requests instructionsets in the appropriate instruction stream order of instructions.However, the order in which instruction sets are returned to the IFU 102is allowed to occur out-of-order as appropriate to match thecircumstances where some requested instruction sets are available andaccessible from the CCU 106 alone and others require an access of theMAU 112.

[0108] Although instruction sets may not be returned in order to theprefetch buffer unit 260, the sequence of instruction sets output on theoutput bus 196 must generally conform to the order of instruction setrequests issued by the IFU 102; the in-order instruction stream sequencesubject to, for example, tentative execution of a target branch stream.

[0109] The IDecode unit 262 receives the instruction sets, generally oneper cycle, IFIFO unit 264 space permitting, from the prefetch bufferoutput bus 196. Each set of four instructions that make up a singleinstruction set is decoded in parallel by the IDecode unit 262. Whilerelevant control flow information is extracted via lines 318 for thebenefit of the control path portion of the IFU 102, the contents of theinstruction set is not altered by the IDecode unit 262.

[0110] Instruction sets from the IDecode Unit 162 are provided onto a128 bit wide input bus 198 of the IFIFO unit 264. Internally, the IFIFOunit 264 consists of a sequence of master/slave registers 200, 204, 208,212, 216, 220, 224. Each register is coupled to its successor to allowthe contents of the master registers 200, 208, 216 to be transferredduring a first half internal processor cycle of FIFO operation to theslave registers 204, 212, 220 and then to the next successive masterregister 208, 216, 224 during the succeeding half-cycle of operation.The input bus 198 is connected to the input of each of the masterregisters 200, 208, 216, 224 to allow loading of an instruction set fromthe IDecode unit 262 directly in to a master register during the secondhalf-cycle of FIFO operation. However, loading of a master register fromthe input bus 198 need not occur simultaneously with a FIFO shift ofdata within the IFIFO unit 264. Consequently, the IFIFO unit 264 can becontinuously filled from the input bus 198 regardless of the currentdepth of instruction sets stored within the instruction FIFO unit 264and, further, independent of the FIFO shifting of data through the IFIFOunit 264.

[0111] Each of the master/slave registers 200, 204, 208, 212, 216, 220,224, in addition to providing for the full parallel storage of a 128 bitwide instruction set, also provides for the storage of several bits ofcontrol information in the respective control registers 202, 206, 210,214, 218, 222, 226. The preferred set of control bits include exceptionmiss and exception modify, (VMU), no memory (MCU), branch bias, stream,and offset (IFU). This control information originates from the controlpath portion of the IFU 102 simultaneous with the loading of an IFIFOmaster register with a new instruction set from the input bus 198.Thereafter, the control register information is shifted in parallelconcurrently with the instruction sets through the IFIFO unit 264.

[0112] Finally, in the preferred architecture 100, the output ofinstruction sets from the IFIFO unit 264 is obtained simultaneously fromthe last two master registers 216,224 on the I_Bucket_(—)0 andI_Bucket_(—)1 instruction set output buses 278, 280. In addition, thecorresponding control register information is provided on the IBASV0 andIBASV1 control field buses 282, 284. These output buses 278, 282, 280,284 are all provided as the instruction stream bus 124 to the IEU 104.

[0113] B. IFU Control Path

[0114] The control path for the IFU 102 directly supports the operationof the prefetch buffer unit 260, IDecode unit 262 and IFIFO unit 264. Aprefetch control logic unit 266 primarily manages the operation of theprefetch buffer unit 260. The prefetch control logic unit 266 and IFU102 in general, receives the system clock signal via the clock line 290for synchronizing IFU operations with those of the IEU 104, CCU 106 andVMU 108. Control signals appropriate for the selection and writing ofinstruction sets into the MBUF 188, TBUF 190 and EBUF 192 are providedon the control lines 304.

[0115] A number of control signals are provided on the control lines 316to the prefetch control logic unit 266. Specifically, a fetch requestcontrol signal is provided to initiate a prefetch operation. Othercontrol signals provided on the control line 316 identify the intendeddestination of the requested prefetch operation as being the MBUF 188,TBUF 190 or EBUF 192. In response to a prefetch request, the prefetchcontrol logic unit 266 generates an ID value and determines whether theprefetch request can be posted to the CCU 106. Generation of the IDvalue is accomplished through the use of a circular four-bit counter.

[0116] The use of a four-bit counter is significant in three regards.The first is that, typically a maximum of nine instruction sets may beactive at one time in the prefetch buffer unit 260; four instructionsets in the MBUF 188, two in the TBUF 190, two in the EBUF 192 and oneprovided directly to the IDecode unit 262 via the flow through bus 194.Secondly, instruction sets include four instructions of four bytes each.Consequently, the least significant four bits of any address selectingan instruction set for fetching are superfluous. Finally, the prefetchrequest ID value can be easily associated with a prefetch request byinsertion as the least significant four bits of the prefetch requestaddress; thereby reducing the total number of address lines required tointerface with the CCU 106.

[0117] To allow instruction sets to be returned by the CCU 106out-of-order with respect to the sequence of prefetch requests issued bythe IFU 102, the architecture 100 provides for the return of the IDrequest value with the return of instruction sets from the CCU 106.However, the out-of-order instruction set return capability may resultin exhaustion of the sixteen unique IDs. A combination of conditionalinstructions executed out-of-order, resulting in additional prefetchesand instruction sets requested but not yet returned can lead topotential re-use of an ID value. Therefore, the four-bit counter ispreferably held, and no further instruction set prefetch requestsissued, where the next ID value would be the same as that associatedwith an as yet outstanding fetch request or another instruction set thenpending in the prefetch buffer 260.

[0118] The prefetch control logic unit 266 directly manages a prefetchstatus array 268 which contains status storage locations logicallycorresponding to each instruction set prefetch buffer location withinthe MBUF 188, TBUF 190 and EBUF 192. The prefetch control logic unit266, via selection and data lines 306, can scan, read and write data tothe status register array 268. Within the array 268, a main bufferregister 308 provides for storage of four, four-bit ID values (MB ID),four single-bit reserved flags (MB RES) and four single-bit valid flags(MB VAL), each corresponding by logical bit-position to the respectiveinstruction set storage locations within the MBUF 180. Similarly, atarget buffer register 310 and extended buffer register 312 each providefor the storage of two four-bit ID values (TB ID, EB ID), two single-bitreserved flags (TB RES, EB RES), and two single-bit valid flags (TB VAL,EB VAL). Finally, a flow through status register 314 provides for thestorage of a single four-bit ID value (FT ID), a single reserved flagbit (FT RES), and a single valid flag bit (FT VAL).

[0119] The status register array 268 is first scanned and, asappropriate, updated by the prefetch control logic unit 266 each time aprefetch request is placed with the CCU 106 and subsequently scanned andupdated each time an instruction set is returned. Specifically, uponreceipt of the prefetch request signal via the control lines 316, theprefetch control logic unit 266 increments the current circular countergenerated ID value, scans the status register array 268 to determinewhether the ID value is available for use and whether a prefetch bufferlocation of the type specified by the prefetch request signal isavailable, examines the state of the CCU IBUSY control line 300 todetermine whether the CCU 106 can accept a prefetch request and, if so,asserts a CCU IREAD control signal on the control line 298, and placesthe incremented ID value on the CCU ID out bus 294 to the CCU 106. Aprefetch storage location is available for use where both of thecorresponding reserved and valid status flags are false. The prefetchrequest ID is written into the ID storage location within the statusregister array 268 corresponding to the intended storage location withinthe MBUF 188, TBUF 190, or EBUF 192 concurrent with the placement of therequest with the CCU 106. In addition, the corresponding reserved statusflag is set true.

[0120] When the CCU 106 is able to return a previously requestedinstruction set to the IFU 102, the CCU IREADY signal is asserted oncontrol line 302 and the corresponding instruction set ID is provided onthe CCU ID control lines 296. The prefetch control logic unit 266 scansthe ID values and reserved flags within the status register array 268 toidentify the intended destination of the instruction set within theprefetch buffer unit 260. Only a single match is possible. Onceidentified, the instruction set is written via the bus 114 into theappropriate location within the prefetch buffer unit 260 or, ifidentified as a flow through request, provided directly to the IDecodeunit 262. In either case, the valid status flag in the correspondingstatus register array is set true.

[0121] The PC logic unit 270, as will be described below in greaterdetail, tracks the virtual address of the MBUF 188, TBUF 190 and EBUF192 instruction streams through the entirety of the IFU 102. Inperforming this function, the PC logic block 270 both controls andoperates from the IDecode unit 262. Specifically, portions of theinstructions decoded by the IDecode unit 262 potentially relevant to achange in the program instruction stream flow are provided on the bus318 to a control flow detection unit 274 and directly to the PC logicblock 270. The control flow detection unit 274 identifies eachinstruction in the decoded instruction set that constitutes a controlflow instruction including conditional and unconditional branchinstructions, call type instructions, software traps proceduralinstructions and various return instructions. The control flow detectionunit 274 provides a control signal, via lines 322, to the PC logic unit270 to identify the location and specific nature of the control flowinstructions within the instruction set present in the IDecode unit 262.The PC logic unit 270, in turn, determines the target address of thecontrol flow instruction, typically from data provided within theinstruction and transferred to the PC logic unit via lines 318. Where,for example, a branch logic bias has been selected to execute ahead forconditional branch instructions, the PC logic unit 270 will begin todirect and separately track the prefetching of instruction sets from theconditional branch instruction target address. Thus, with the nextassertion of a prefetch request on the control lines 316, the PC logicunit 270 will further assert a control signal, via lines 316, selectingthe destination of the prefetch to be the TBUF 190, assuming that priorprefetch instruction sets were directed to the MBUF 188 or EBUF 192.Once the prefetch control logic unit 266 determines that a prefetchrequest can be supplied to the CCU 106, the prefetch control logic unit266 provides an enabling signal, again via lines 316, to the PC logicunit 270 to enable the provision of a page offset portion of the targetaddress (CCU PADDR [13:4]) via the address lines 324 directly to the CCU106. At the same time, the PC logic unit 270, where a new virtual tophysical page translation is required further provides a VMU requestsignal via control line 328 and the virtualizing portion of the targetaddress (VMU VADDR [31:14]) via the address lines 326 to the VMU 108 fortranslation into a physical address. Where a page translation is notrequired, no operation by the VMU 108 is required. Rather, the previoustranslation result is maintained in an output latch coupled to the bus122 for immediate use by the CCU 106.

[0122] Operational errors in the VMU 108 in performing the virtual tophysical translation requested by the PC logic unit 270 are reported viathe VMU exception and VMU miss control lines 332, 334. The VMU misscontrol line 334 reports a translation lookaside buffer (TLB) miss. TheVMU exception control signal, on VMU exception line 332, is raised forall other exceptions. In both cases, the PC logic unit handles the errorcondition by storing the current execution point in the instructionstream and then prefetching, as if in response to an unconditionalbranch, a dedicated exception handling routine instruction stream fordiagnosing and handling the error condition. The VMU exception and misscontrol signals identify the general nature of the exceptionencountered, thereby allowing the PC logic unit 270 to identify theprefetch address of a corresponding exception handling routine.

[0123] The IFIFO control logic unit 272 is provided to directly supportthe IFIFO unit 264. Specifically, the PC logic unit 270 provides acontrol signal via the control lines 336 to signal the IFIFO controllogic unit 272 that an instruction set is available on the input bus 198from the IDecode unit 262. The IFIFO control unit 272 is responsible forselecting the deepest available master register 200, 208, 216, 224 forreceipt of the instruction set. The output of each of the master controlregisters 202, 210, 218, 226 is provided to the IFIFO control unit 272via the control bus 338. The control bits stored by each master controlregister includes a two-bit buffer address (IF_Bx_ADR), a single streamindicator bit (IF_Bx_STRM), and a single valid bit (IF_Bx_VLD). The twobit buffer address identifies the first valid instruction within thecorresponding instruction set. That is, instruction sets returned by theCCU 106 may not be aligned such that the target instruction of a branchoperation, for example, is located in the initial instruction locationwithin the instruction set. Thus, the buffer address value is providedto uniquely identify the initial instruction within an instruction setthat is to be considered for execution.

[0124] The stream bit is used essentially as a marker to identify thelocation of instruction sets containing conditional control flowinstructions, and giving rise to potential control flow changes, in thestream of instructions through the IFIFO unit 264. The main instructionstream is processed through the MBUF 188 generally with a stream bitvalue of 0. On the occurrence of a relative conditional branchinstruction, for example, the corresponding instruction set is markedwith a stream bit value of 1. The conditional branch instruction isdetected by the IDecode unit 262. Up to four conditional control flowinstructions may be present in the instruction set. The instruction setis then stored in the deepest available master register of the IFIFOunit 264.

[0125] In order to determine the target address of the conditionalbranch instruction, the current IEU 104 execution point address (DPC),the relative location of the conditional instruction containinginstruction set as identified by the stream bit, and the conditionalinstruction location offset in the instruction set, as provided by thecontrol flow detector 274, are combined with the relative branch offsetvalue as obtained from a corresponding branch instruction field viacontrol lines 318. The result is a branch target virtual address that isstored by the PC logic unit 270. The initial instruction sets of thetarget instruction stream may then be prefetched into the TBUF 190utilizing this address.

[0126] Depending on the preselected branch bias selected for the PClogic unit 270, the IFIFO unit 264 will continue to be loaded fromeither the MBUF 188 or TBUF 190. If a second instruction set containingone or more conditional flow instructions is encountered, theinstruction set is marked with a stream bit value of 0. Since a secondtarget stream cannot be fetched, the target address is calculated andstored by the PC logic unit 270, but no prefetch is performed. Inaddition, no further instruction sets can be processed through theIDecode unit 262, or at least none that are found to contain aconditional flow control instruction.

[0127] The PC logic unit 270, in the preferred embodiments of thepresent invention, can manage up to eight conditional flow instructionsoccurring in up to two instruction sets. The target addresses for eachof the two instruction sets marked by stream bit changes are stored inan array of four address registers with each target address positionedlogically with respect to the location of the corresponding conditionalflow instruction in the instruction set.

[0128] Once the branch result of the first in-order conditional flowinstruction is resolved, the PC logic unit 270 will direct the prefetchcontrol unit 260, via control signals on lines 316, to transfer thecontents of the TBUF 190 to the MBUF 188, if the branch is taken, and tomark invalid the contents of the TBUF 190. Any instruction sets in theIFIFO unit 264 from the incorrect instruction stream, target stream ifthe branch is not taken and main stream if the branch is taken, arecleared from the IFIFO unit 264. If a second or subsequent conditionalflow control instruction exists in the first stream bit markedinstruction set, that instruction is handled in a consistent manner: theinstruction sets from the target stream are prefetched, instruction setsfrom the MBUF 188 or TBUF 190 are processed through the IDecode unit 262depending on the branch bias, and the IFIFO unit 264 is cleared ofincorrect stream instruction sets when the conditional flow instructionfinally resolves.

[0129] If a secondary conditional flow instruction set remains in theIFIFO unit 264 once the IFIFO unit 264 is cleared of incorrect streaminstruction sets, and the first conditional flow instruction setcontains no further conditional flow instructions, the target addressesof the second stream bit marked instruction set are promoted to thefirst array of address registers. In any case, a next instruction setcontaining conditional flow instructions can then be evaluated throughthe IDecode unit 262. Thus, the toggle usage of the stream bit allowspotential control flow changes to be marked and tracked through theIFIFO unit 264 for purposes of calculating branch target addresses andfor marking the instruction set location above which to clear where thebranch bias is subsequently determined to have been incorrect for aparticular conditional flow control instruction.

[0130] Rather than actually clearing instruction sets from the masterregisters, the IFIFO control logic unit 272 simply resets the valid bitflag in the control registers of the corresponding master registers ofthe IFIFO unit 264. The clear operation is instigated by the PC logicunit 270 in a control signal provided on lines 336. The inputs of eachof the master control registers 202, 210, 218, 226 are directlyaccessible by the IFIFO control logic unit 272 via the status bus 230.In the preferred architecture 100, the bits within these master controlregisters 202, 210, 218, 226 may be set by the IFIFO control unit 272concurrent with or independent of a data shift operation by the IFIFOunit 264. This capability allows an instruction set to be written intoany of the master registers 200, 208, 216, 224, and the correspondingstatus information to be written into the master control registers 202,210, 218, 226 asynchronously with respect to the operation of the IEU104.

[0131] Finally, an additional control line on the control and status bus230 enables and directs the FIFO operation of the IFIFO unit 264. AnIFIFO shift is performed by the IFIFO control logic unit 272 in responseto the shift request control signal provided by the PC logic unit 270via the control lines 336. The IFIFO control unit 272, based on theavailability of a master register 200, 208, 216, 224 to receive aninstruction set provides a control signal, via lines 316, to theprefetch control unit 266 to request the transfer of a next appropriateinstruction set from the prefetch buffers 260. On transfer of theinstruction set, the corresponding valid bit in the array 268 is reset.

[0132] C. IFU/IEU Control Interface

[0133] The control interface between the IFU 102 and IEU 104 is providedby the control bus 126. This control bus 126 is coupled to the PC logicunit 270 and consists of a number of control, address and specializeddata lines. Interrupt request and acknowledge control signals, as passedvia the control lines 340, allow the IFU 102 to signal and synchronizeinterrupt operations with the IEU 104. An externally generated interruptsignal is provided on a line 292 to the logic unit 270. In response, aninterrupt request control signal, provided on lines 340, causes the IEU104 to cancel tentatively executed instructions. Information regardingthe nature of an interrupt is exchanged via interrupt information lines341. When the IEU 104 is ready to begin receiving instruction setsprefetched from the interrupt service routine address determined by thePC logic unit 270, the IEU 104 asserts an interrupt acknowledge controlsignal on the lines 340. Execution of the interrupt service routine, asprefetched by the IFU 102, will then commence.

[0134] An IFIFO read (IFIFO RD) control signal is provided by the IEU104 to signal that the instruction set present in the deepest masterregister 224 has been completely executed and that a next instructionset is desired. Upon receipt of this control signal, the PC logic unit270 directs the IFIFO control logic unit 272 to perform a IFIFO shiftoperation on the IFIFO unit 264.

[0135] A PC increment request and size value (PC INC/SIZE) is providedon the control lines 344 to direct the PC logic unit 270 to update thecurrent program counter value by a corresponding size number ofinstructions. This allows the PC logic unit 270 to maintain a point ofexecution program counter (DPC) that is precise to the location of thefirst in-order executing instruction in the current program instructionstream.

[0136] A target address (TARGET ADDR) is returned on the address lines346 to the PC logic unit 270. The target address is the virtual targetaddress of a branch instruction that depends on data stored within theregister file of the IEU 104. Operation of the IEU 104 is thereforerequired to calculate the target address.

[0137] Control flow result (CF RESULT) control signals are provided onthe control lines 348 to the PC logic unit 270 to identify whether anycurrently pending conditional branch instruction has been resolved andwhether the result is either a branch taken or not taken. Based on thesecontrol signals, the PC logic unit 270 can determine which of theinstruction sets in the prefetch buffer 260 and IFIFO unit 264 must becancelled, if at all, as a consequence of the execution of theconditional flow instruction.

[0138] A number of IEU instruction return type control signals (IEUReturn) are provided on the control lines 350 to alert the IFU 102 tothe execution of certain instructions by the IEU 104. These instructionsinclude a return from procedural instruction, return from trap, andreturn from subroutine call. The return from trap instruction is usedequally in hardware interrupt and software trap handling routines. Thesubroutine call return is also used in conjunction with jump-and-linktype calls. In each case, the return control signals are provided toalert the IFU 102 to resume its instruction fetching operation withrespect to the previously interrupted instruction stream. Origination ofthe signals from the IEU 104 allows the precise operation of the system100 to be maintained; the resumption of an “interrupted” instructionstream is performed at the point of execution of the return instruction.

[0139] A current instruction execution PC address (Current IF_PC) isprovided on an address bus 352 to the IEU 104. This address value, theDPC, identifies the precise instruction being executed by the IEU 104.That is, while the IEU 104 may tentatively execute ahead instructionspast the current IF_PC address, this address must be maintained forpurposes of precise control of the architecture 100 with respect to theoccurrence of interrupts, exceptions, and any other events that wouldrequire knowing the precise state-of-the-machine. When the IEU 104determines that the precise state-of-the-machine in the currentlyexecuting instruction stream can be advanced, the PC Inc/Size signal isprovided to the IFU 102 and immediately reflected back in the currentIF_PC address value.

[0140] Finally, an address and bi-directional data bus 354 is providedfor the transfer of special register data. This data may be programmedinto or read from special registers within the IFU 102 by the IEU 104.Special register data is generally loaded or calculated by the IEU 104for use by the IFU 102.

[0141] D. PC Logic Unit Detail

[0142] A detailed diagram of the PC Logic unit 270 including a PCcontrol unit 362, interrupt control unit 363, prefetch PC control unit364 and execution PC control unit 366, is shown in FIG. 3. The PCcontrol unit 362 provides timing control over the prefetch and executionPC control units 364, 366 in response to control signals from theprefetch control logic unit 266, IFIFO control logic unit 272, and theIEU 104, via the interface bus 126. The Interrupt Control Unit 363 isresponsible for managing the precise processing of interrupts andexceptions, including the determination of a prefetch trap addressoffset that selects an appropriate handling routine to process arespective type of trap. The prefetch PC control unit 364 is, inparticular, responsible for managing program counters necessary tosupport the prefetch buffers 188, 190, 192, including storing returnaddresses for traps handling and procedural routine instruction flows.In support of this operation, the prefetch PC control unit 364 isresponsible for generating the prefetch virtual address including theCCU PADDR address on the physical address bus lines 324 and the VMUVMADDR address on the address lines 326. Consequently, the prefetch PCcontrol unit 364 is responsible for maintaining the current prefetch PCvirtual address value.

[0143] The prefetch operation is generally initiated by the IFIFOcontrol logic unit 272 via a control signal provided on the controllines 316. In response, the PC control unit 362 generates a number ofcontrol signals provided on the control lines 372 to operate theprefetch PC control unit 364 to generate the PADDR and, as needed, theVMADDR addresses on the address lines 324,326. An increment signal,having a value of 0 to four, may be also provided on the control lines374 depending on whether the PC control unit 362 is re-executing aninstruction set fetch at the present prefetch address, aligning for thesecond in a series of prefetch requests, or selecting the next fullsequential instruction set for prefetch. Finally, the current prefetchaddress PF_PC is provided on the bus 370 to the execution PC controlunit 366.

[0144] New prefetch addresses originate from a number of sources. Aprimary source of addresses is the current IF_PC address provided fromthe execution PC control unit 366 via bus 352. Principally, the IF_PCaddress provides a return address for subsequent use by the prefetch PCcontrol unit 364 when an initial call, trap or procedural instructionoccurs. The IF_PC address is stored in registers in the prefetch PCcontrol unit 364 upon each occurrence of these instructions. In thismanner, the PC control unit 362, on receipt of a IEU return signal, viacontrol lines 350, need merely select the corresponding return addressregister within the prefetch PC control unit 364 to source a newprefetch virtual address, thereby resuming the original programinstruction stream.

[0145] Another source of prefetch addresses is the target address valueprovided on the relative target address bus 382 from the execution PCcontrol unit 366 or on the absolute target address bus 346 provided fromthe IEU 104. Relative target addresses are those that can be calculatedby the execution PC control unit 366 directly. Absolute target addressesmust be generated by the IEU 104, since such target addresses aredependent on data contained in the IEU register file. The target addressis routed over the target address bus 384 to the prefetch PC controlunit 364 for use as a prefetch virtual address. In calculating therelative target address, an operand portion of the corresponding branchinstruction is also provided on the operand displacement portion of thebus 318 from the IDecode unit 262.

[0146] Another source of prefetch virtual addresses is the execution PCcontrol unit 366. A return address bus 352′ is provided to transfer thecurrent IF_PC value (DPC) to the prefetch PC control unit 364. Thisaddress is utilized as a return address where an interrupt, trap orother control flow instruction such as a call has occurred within theinstruction stream. The prefetch PC control unit 364 is then free toprefetch a new instruction stream. The PC control unit 362 receives anIEU return signal, via lines 350, from the IEU 104 once thecorresponding interrupt or trap handling routine or subroutine has beenexecuted. In turn, the PC control unit 362 selects, via one of the PFPCcontrol signals on line 372 and based on an identification of the returninstruction executed as provided via lines 350, a register containingthe current return virtual address. This address is then used tocontinue the prefetch operation by the PC logic unit 270.

[0147] Finally, another source of prefetch virtual addresses is from thespecial register address and data bus 354. An address value, or at leasta base address value, calculated or loaded by the IEU 104 is transferredas data via the bus 354 to the prefetch PC control unit 364. The baseaddresses include the base addresses for the trap address table, a fasttrap table, and a base procedural instruction dispatch table. The bus354 also allows many of the registers in the prefetch and execution PCcontrol units 364, 366 to be read to allow corresponding aspects of thestate-of-the-machine to be manipulated through the IEU 104.

[0148] The execution PC control unit 366, subject to the control of thePC control unit 362 is primarily responsible for calculating the currentIF_PC address value. In this role, the execution PC control unit 366responds to control signals provided by the PC control unit 362 on theExPC control lines 378 and increment/size control signals provided onthe control lines 380 to adjust the IF_PC address. These control signalsare generated primarily in response to the IFIFO read control signalprovided on line 342 and the PC increment/size value provided on thecontrol lines 344 from the IEU 104.

[0149] 1. PF and EXPC Control/Data Unit Detail

[0150]FIG. 4 provides a detailed block diagram of the prefetch andexecution PC control units 364, 366. These units primarily consist ofregisters, incrementors and the like, selectors and adder blocks.Control for managing the transfer of data between these blocks isprovided by the PC Control Unit 362 via the PFPC control lines 372, theEXPC control lines 378 and the Increment Control lines 374, 380. Forpurposes of clarity, those specific control lines are not shown in theblock diagram of FIG. 4. However, it should be understood that thesecontrol signals are provided to the blocks shown as described herein.

[0151] Central to the prefetch PC control unit 364 is a prefetchselector (PF_PC SEL) 390 that operates as a central selector of thecurrent prefetch virtual address. This current prefetch address isprovided on the output bus 392 from the prefetch selector to anincrementor unit 394 to generate a next prefetch address. This nextprefetch address is provided on the incrementor output bus 396 to aparallel array of registers MBUF PFnPC 398, TBUF PFnPC 400, and EBUFPFnPC 402. These registers 398, 400, 402 effectively store the nextinstruction prefetch address. However, in accordance with the preferredembodiment of the present invention, separate prefetch addresses areheld for the MBUF 188, TBUF 190, and EBUF 192. The prefetch addresses,as stored by the MBUF, TBUF and EBUF PFnPC registers 398, 400, 402 arerespectively provided by the address buses 404, 408, 410 to the prefetchselector 390. Thus, the PC control unit 362 can direct an immediateswitch of the prefetch instruction stream merely by directing theselection, by the prefetch selector 390, of another one of the prefetchregisters 398, 400, 402. Once that address value has been incremented bythe incrementor 394, if a next instruction set in the stream is to beprefetched, the value is returned to the appropriate one of the prefetchregisters' 398, 400, 402. Another parallel array of registers, forsimplicity shown as the single special register block 412, is providedto store a number of special addresses. The register block 412 includesa trap return address register, a procedural instruction return addressregister, a procedural instruction dispatch table base address register,a trap routine dispatch table base address register, and a fast traproutine table base address register. Under the control of the PC controlunit 362, these return address registers may receive the current IF_PCexecution address via the bus 352′. The address values stored by thereturn and base address registers within the register block 412 may beboth read and written independently by the IEU 104. The register areselected and values transferred via the special register address anddata bus 354.

[0152] A selector within the special register block 412, controlled bythe PC control unit 362, allows the addresses stored by the registers ofthe register block 412 to be put on the special register output bus 416to the prefetch selector 390. Return addresses are provided directly tothe prefetch selector 390. Base address values are combined with theoffset value provided on the interrupt offset bus 373 from the interruptcontrol unit 363. Once sourced to the prefetch selector 390 via the bus373′, a special address can be used as the initial address for a newprefetch instruction stream by thereafter continuing the incrementalloop of the address through the incrementor 394 and one of the prefetchregisters 398, 400, 402.

[0153] Another source of addresses to the prefetch selector 390 is anarray of registers within the target address register block 414. Thetarget registers within the block 414 provide for storage of, in thepreferred embodiment, eight potential branch target addresses. Theseeight storage locations logically correspond to the eight potentiallyexecutable instructions held in the lowest two master registers 216, 224of the IFIFO unit 264. Since any, and potentially all of the thoseinstructions could be conditional branch instructions, the targetregister block 414 allows for their precalculated target addresses to bestored awaiting use for fetching of a target instruction stream throughthe TBUF 190. In particular, if a conditional branch bias is set suchthat the PC Control Unit 362 immediately begins prefetching of a targetinstruction stream, the target address is immediately fed through thetarget register block 414 via the address bus 418 to the prefetchselector 390. Once incremented by the incrementor 394, the address isstored back to the TBUF PFnPC 400 for use in subsequent prefetchoperations of the target instruction stream. If additional branchinstructions occur within the target instruction stream, the targetaddresses of such secondary branches are calculated and stored in thetarget register array 414 pending use upon resolution of the firstconditional branch instruction.

[0154] A calculated target address as stored by the target registerblock 414, is transferred from a target address calculation unit withinthe execution PC control unit 366 via the address lines 382 or from theIEU 104 via the absolute target address bus 346.

[0155] The Address value transferred through the prefetch PF_PC selector390 is a full thirty-two bit virtual address value. The page size, inthe preferred embodiment of the present invention is fixed at 16 KBytes,corresponding to the maximum page offset address value [13:0].Therefore, a VMU page translation is not required unless there is achange in the current prefetch virtual page address [27:14]. Acomparator in the prefetch selector 390 detects this circumstance. A VMUtranslation request signal (VMXLAT) is provided via line 372′ to the PCcontrol unit 362 when there is a change in the virtual page address,either due incrementing across a page boundary or a control flow branchto another page address. In turn, the PC control unit 362 directs theplacement of the VMU VMADDR address on lines 326, in addition to the CCUPADDR on lines 324, both via a buffer unit 420, and the appropriatecontrol signals on the VMU control lines 326, 328, 330 to obtain a VMUvirtual to physical page translation. Where a page translation is notrequired, the current physical page address [31:14] is maintained by alatch at the output of the VMU unit 108 on the bus 122.

[0156] The virtual address provided onto the bus 370 is incremented bythe incrementor 394 in response to a signal provided on the incrementcontrol line 374. The incrementor 394 increments by a value representingan instruction set (four instructions or sixteen bytes) in order toselect a next instruction set. The low-order four bits of a prefetchaddress as provided to the CCU unit 106 are zero. Therefore the actualtarget address instruction in a first branch target instruction set maynot be located in the first instruction location. However, the low-orderfour bits of the address are provided to the PC control unit 362 toallow the proper first branch instruction location to be known by theIFU 102. The detection and handling, by returning the low order bits[3:2] of a target address as the two-bit buffer address, to select theproper first instruction for execution in a non-aligned targetinstruction set, is performed only for the first prefetch of a newinstruction stream, i.e., any first non-sequential instruction setaddress in an instruction stream. The non-aligned relationship betweenthe address of the first instruction in an instruction set and theprefetch address used in prefetching the instruction set can and isthereafter ignored for the duration of the current sequentialinstruction stream.

[0157] The remainder of the functional blocks shown in FIG. 34 comprisethe execution PC control unit 366. In accordance with the preferredembodiment of the present invention, the execution PC control unit 366incorporates its own independently functioning program counterincrementor. Central to this function is an execution selector (DPC SEL)430. The address output by the execution selector 430, on the addressbus 352′, is the present execution address (DPC) of the architecture100. This execution address is provided to an adder unit 434. Theincrement/size control signals provided on the lines 380 specify aninstruction increment value of from one to four that the adder unit 434adds to the address obtained from the selector 430. As the adder 432additionally performs an output latch function, the incremented nextexecution address is provided on the address lines 436 directly back tothe execution selector 430 for use in the next execution incrementcycle.

[0158] The initial execution address and all subsequent new streamaddresses are obtained through a new stream register unit 438 via theaddress lines 440. The new stream register unit 438 allows the newcurrent prefetch address, as provided on the PFPC address bus 370 fromthe prefetch selector 390 to be passed on to the address bus 440directly or stored for subsequent use. That is, where the prefetch PCcontrol unit 364 determines to begin prefetching at a new virtualaddress, the new stream address is temporarily stored by the new streamregister unit 438. The PC control unit 362, by its participation in boththe prefetch and execution increment cycles, holds the new streamaddress in the new stream register 438 unit until the execution addresshas reached the program execution point corresponding to the controlflow instruction that instigated the new instruction stream. The newstream address is then output from the new stream register unit 438 tothe execution selector 430 to initiate the independent generation ofexecution addresses in the new instruction stream.

[0159] In accordance with the preferred embodiments of the presentinvention, the new stream register unit 438 provides for the bufferingof two control flow instruction target addresses. By the immediateavailability of the new stream address, there is essentially no latencyin the switching of the execution PC control unit 366 from thegeneration of a current sequence of execution addresses to a new streamsequence of execution addresses.

[0160] Finally, an IF_PC selector (IF_PC SEL) 442 is provided toultimately issue the current IF_PC address on the address bus 352 to theIEU 104. The inputs to the IF_PC selector 442 are the output addressesobtained from either the execution selector 430 or new stream registerunit 438. In most instances, the IF_PC selector 442 is directed by thePC control unit 362 to select the execution address output by theexecution selector 430. However, in order to further reduce latency inswitching to a new virtual address used to initiate execution of a newinstruction stream, the selected address provided from the new streamregister unit 438 can be bypassed via bus 440 directly to the IF_PCselector 442 for provision as the current IF_PC execution address.

[0161] The execution PC control unit 366 is capable of calculating allrelative branch target addresses. The current execution point addressand the new stream register unit 438 provided address are received by acontrol flow selector (CF_PC) 446 via the address buses 352′, 440.Consequently, the PC control unit 362 has substantial flexibility inselecting the exact initial address from which to calculate a targetaddress. This initial, or base, address is provided via address bus 454to a target address ALU 450. A second input value to the target ALU 450is provided from a control flow displacement calculation unit 452 viabus 458. Relative branch instructions, in accordance with the preferredarchitecture 100, incorporate a displacement value in the form of animmediate mode constant that specifies a relative new target address.The control flow displacement calculation unit 452 receives the operanddisplacement value initially obtained via the IDecode unit operandoutput bus 318. Finally, an offset register value is provided to thetarget address ALU 450 via the lines 456. The offset register 448receives an offset value via the control lines 378′ from the PC controlunit 362. The magnitude of the offset value is determined by the PCcontrol unit 362 based on the address offset between the base addressprovided on the address lines 454 and the address of the current branchinstruction for which the relative target address is being calculated.That is, the PC control unit 362, through its control of the IFIFOcontrol logic unit 272 tracks the number of instructions separating theinstruction at the current execution point address (requested by CP_PC)and the instruction that is currently being processed by the IDecodeunit 262 and, therefore, being processed by the PC logic unit 270 todetermine the target address for that instruction.

[0162] Once the relative target address has been calculated by thetarget address ALU 450, the target address is written into acorresponding one of the target registers 414 via the address bus 382.

[0163] 2. PC Control Algorithm Detail

[0164] 1. Main Instruction Stream Processing: MBUF PFnPC

[0165] 1.1. The address of the next main flow prefetch instruction isstored in the MBUF PFnPC.

[0166] 1.2. In the absence of a control flow instruction, a 32 bitincrementor adjusts the address value in the MBUF PFnPC by sixteen bytes(×16) with each prefetch cycle.

[0167] 1.3. When an unconditional control flow instruction is IDecoded,all prefetched data fetched subsequent to the instruction set will beflushed and the MBUF PFnPC is loaded, through the target register unit,PF_PC selector and incrementor, with the new main instruction streamaddress. The new address is also stored in the new stream registers.

[0168] 1.3.1. The target address of a relative unconditional controlflow is calculated by the IFU from register data maintained by the IFUand from operand data following the control flow instruction.

[0169] 1.3.2. The target address of an absolute unconditional controlflow instruction is eventually calculated by the IEU from a registerreference, a base register value, and an index register value.

[0170] 1.3.2.1. Instruction prefetch cycling stalls until the targetaddress is returned by the IEU for absolute address control flowinstruction; instruction execution cycling continues.

[0171] 1.4. The address of the next main flow prefetch instruction set,resulting from an unconditional control flow instruction, is bypassedthrough the target address register unit, PF_PC selector and incrementorand routed for eventual storage in the MBUF PFnPC; prefetching continuesat 1.2.

[0172] 2. Procedural Instruction Stream Processing: EBUF PFnPC

[0173] 2.1. A procedural instruction may be prefetched in the main orbranch target instruction stream. If fetched in a target stream, stallprefetching of the procedural stream until the conditional control flowinstruction resolves and the procedural instruction is transferred tothe MBUF. This allows the TBUF to be used in handling of conditionalcontrol flows that occur in the procedural instruction stream.

[0174] 2.1.1. A procedural instruction should not appear in a proceduralinstruction stream, i.e., procedural instructions should not be nested:a return from procedural instruction will return execution to the maininstruction flow. In order to allow nesting, an additional, dedicatedreturn from nested procedural instruction would be required. While thearchitecture can readily support such an instruction, the need for anested procedural instruction capability will not likely improve theperformance of the architecture.

[0175] 2.1.2. In a main instruction stream, a procedural instructionstream that, in turn, includes first and second conditional control flowinstruction containing instruction sets will stall prefetching withrespect to the second conditional control flow instruction set until anyconditional control flow instructions in the first such instruction setare resolved and the second conditional control flow instruction set hasbeen transferred to the MBUF.

[0176] 2.2. Procedural instructions provide a relative offset, includedas an immediate mode operand field of the instruction, to identify theprocedural routine starting address:

[0177] 2.2.1. The offset value provided by the procedural instruction iscombined with a value contained in a procedural base address (PBR)register maintained in the IFU. This PBR register is readable andwritable via the special address and data bus in response to theexecution of a special register move instruction.

[0178] 2.3. When a procedural instruction is encountered, the next maininstruction stream IF_PC address is stored in the uPC return addressregister and the procedure-in-progress bit in the processor statusregister (PSR) is set.

[0179] 2.4. The starting address of the procedural stream is routed fromthe PBR register (plus the procedural instruction operand offset value)to the PF_PC selector.

[0180] 2.5. The starting address of the procedural stream issimultaneously provided to the new stream register unit and to theincrementor for incrementing (×16); the incremented address is thenstored in the EBUF PFnPC.

[0181] 2.6. In the absence of a control flow instruction, a 32 bitincrementor adjusts address value (×16) in the EBUF PFnPC with eachprocedural instruction prefetch cycle.

[0182] 2.7. When an unconditional control flow instruction is IDecoded,all prefetched data fetched subsequent to the branch instruction will beflushed and the EBUF PFnPC is loaded with the new procedural instructionstream address.

[0183] 2.7.1. The target address of a relative unconditional controlflow instruction is calculated by the IFU from IFU maintained registerdata and from the operand data provided within an immediate mode operandfield of the control flow instruction.

[0184] 2.7.2. The target address of an absolute unconditional branch iscalculated by the IEU from a register reference, a base register value,and an index register value.

[0185] 2.7.2.1. Instruction prefetch cycling stalls until the targetaddress is returned by the IEU for absolute address branches; executioncycling continues.

[0186] 2.8. The address of the next procedural flow prefetch instructionset is stored in the EBUF PFNPC and prefetching continues at 1.2.

[0187] 2.9. When a return from procedure instruction is IDecoded,prefetching continues from the address stored in the uPC register, whichis then incremented (×16) and returned to the MBUF PFnPC register forsubsequent prefetches.

[0188] 3. Branch Instruction Stream Processing: TBUF PFnPC.

[0189] 3.1. When a conditional control flow instruction, occurring in afirst instruction set in the MBUF instruction stream, is IDecoded, thetarget address is determined by the IFU if the target address isrelative to the current address or by the IEU for absolute addresses.

[0190] 3.2. For “branch taken bias”:

[0191] 3.2.1. If the branch is to an absolute address, stall instructionprefetch cycling until the target address is returned by the IEU;execution cycling continues.

[0192] 3.2.2. Load the TBUF PFnPC with the branch target address bytransfer through the PF_PC selector and incrementor.

[0193] 3.2.3. Target instruction stream instructions are prefetched intothe TBUF and then routed into the IFIFO for subsequent execution; if theIFIFO and TBUF becomes full, stall prefetching.

[0194] 3.2.4. The 32 bit incrementor adjusts (×16) the address value inthe TBUF PFnPC with each prefetch cycle.

[0195] 3.2.5. Stall the prefetch operation on IDecode of a conditionalcontrol flow instruction, occurring in a second instruction set in thetarget instruction stream until the all conditional branch instructionsin the first (primary) set are resolved (but go ahead and calculate therelative target address and store in target registers).

[0196] 3.2.6. If conditional branch in the first instruction setresolves to “taken”:

[0197] 3.2.6.1. Flush instruction sets following the first conditionalflow instruction set in the MBUF or EBUF, if the source of the branchwas the EBUF instruction stream as determined from theprocedure-in-progress bit.

[0198] 3.2.6.2. Transfer the TBUF PFnPC value to MBUF PFnPC or EBUFbased on the state of the procedure-in-progress bit.

[0199] 3.2.6.3. Transfer the prefetched TBUF instructions to the MBUF orEBUF based on the state of procedure-in-progress bit.

[0200] 3.2.6.4. If a second conditional branch instruction set has notbeen IDecoded, continue MBUF or EBUF prefetching operations based on thestate of the procedure-in-progress bit.

[0201] 3.2.6.5. If a second conditional branch instruction has beenIDecoded, begin processing that instruction (go to step 3.3.1).

[0202] 3.2.7. If the conditional control for instruction(s) in the firstconditional instruction set resolves to “not taken”:

[0203] 3.2.7.1. Flush the IFIFO and IEU of instruction sets andinstructions, from the target instruction stream.

[0204] 3.2.7.2. Continue MBUF or EBUF prefetching operations.

[0205] 3.3. For “branch not taken bias”:

[0206] 3.3.1. Stall prefetch of instructions into the MBUF; executioncycling continues.

[0207] 3.3.1.1. If the conditional control flow instruction in the firstconditional instruction set is relative, calculate the target addressand store in the target registers.

[0208] 3.3.1.2. If the conditional control flow instructions in thefirst conditional instruction set is absolute, wait for the IEU tocalculate the target address and return the address to the targetregisters.

[0209] 3.3.1.3. Stall the prefetch operation on IDecode of a conditionalcontrol flow instruction in a second instruction set until theconditional control flow instruction(s) in the first conditionalinstruction set instruction is resolved.

[0210] 3.3.2. Once the target address of the first conditional branch iscalculated, load into TBUF PFnPC and also begin prefetching instructionsinto the TBUF concurrent with execution of the main instruction stream.Target instruction sets are not loaded into the IFIFO (the branch targetinstructions are thus on hand when each conditional control flowinstruction in the first instruction set resolves).

[0211] 3.3.3. If a conditional control flow instruction in the first setresolves to “taken”:

[0212] 3.3.3.1. Flush the MBUF or EBUF, if the source of the branch wasthe EBUF instruction stream, as determined from the state of theprocedure-in-progress bit, and the IFIFO and IEU of instructions fromthe main stream following the first conditional branch instruction set.

[0213] 3.3.3.2. Transfer the TBUF PFnPC value to MBUF PFnPC or EBUF, asdetermined from the state of the procedure-in-progress bit.

[0214] 3.3.3.3. Transfer the prefetched TBUF instructions to the MBUF orEBUF, as determined from the state of the procedure-in-progress bit.

[0215] 3.3.3.4. Continue MBUF or EBUF prefetching operations, asdetermined from the state of the procedure-in-progress bit.

[0216] 3.3.4. If a conditional control flow instruction in the first setresolves to “not taken”:

[0217] 3.3.4.1. Flush the TBUF of instruction sets from the targetinstruction stream.

[0218] 3.3.4.2. If a second conditional branch instruction has not beenIDecoded, continue MBUF or EBUF, as determined from the state of theprocedure-in-progress bit, prefetching operations.

[0219] 3.3.4.3. If a second conditional branch instruction has beenIDecoded, begin processing that instruction (go to step 3.4.1).

[0220] 4. Interrupts, Exceptions and Trap Instructions.

[0221] 4.1. Traps generically include:

[0222] 4.1.1. Hardware Interrupts.

[0223] 4.1.1.1. Asynchronously (external) occurring events, internal orexternal.

[0224] 4.1.1.2. Can occur at any time and persist.

[0225] 4.1.1.3. Serviced in priority order between atomic (ordinary)instructions and may suspend procedural instructions.

[0226] 4.1.1.4. The starting address of an interrupt handler isdetermined as the vector number offset into a predefined table of traphandler entry points.

[0227] 4.1.2. Software Trap Instructions.

[0228] 4.1.2.1. Synchronously (internal) occurring instructions.

[0229] 4.1.2.2. A software instruction that executes as an exception.

[0230] 4.1.2.3. The starting address of the trap handler is determinedfrom the trap number offset combined with a base address value stored inthe TBR or FTB register.

[0231] 4.1.3. Exceptions.

[0232] 4.1.3.1. Events occurring synchronously with an instruction.

[0233] 4.1.3.2. Handled at the time the instruction is executed.

[0234] 4.1.3.3. Due to consequences of the exception, the exceptedinstruction and all subsequent executed instructions are cancelled.

[0235] 4.1.3.4. The starting address of the exception handler isdetermined from the trap number offset into a predefined table of traphandler entry point.

[0236] 4.2. Trap instruction stream operations occur in-line with thethen currently executing instruction stream.

[0237] 4.3. Traps may nest, provided the trap handling routine saves thexPC address prior to a next allowed trap—failure to do so will corruptthe state of the machine if a trap occurs prior to completion of thecurrent trap operation.

[0238] 5. Trap Instruction Stream Processing: xPC.

[0239] 5.1. When a trap is encountered:

[0240] 5.1.1. If an asynchronous interrupt, the execution of thecurrently executing instruction(s) is suspended.

[0241] 5.1.2. If a synchronous exception, the trap is processed uponexecution of the excepted instruction.

[0242] 5.2. When a trap is processed:

[0243] 5.2.1. Interrupts are disabled.

[0244] 5.2.2. The current IF_PC address is stored in the xPC trap statereturn address register.

[0245] 5.2.3. The IFIFO and the MBUF prefetch buffers at and subsequentto the IF_PC address are flushed.

[0246] 5.2.4. Executed instructions at and subsequent to the addressIF_PC and the results of those instructions are flushed from the IEU.

[0247] 5.2.5. The MBUF PFnPC is loaded with the address of the traphandler routine.

[0248] 5.2.5.1. Source of a trap address either the TBR or FTB register,depending on the type of trap as determined by the trap number, whichare provided in the set of special registers.

[0249] 5.2.6. Instructions are prefetched and dropped into the IFIFO forexecution in a normal manner.

[0250] 5.2.7. The instructions of the trap routine are then executed.

[0251] 5.2.7.1. The trap handling routine may provide for the xPCaddress to be saved to a predefined location and interrupts re-enabled;the xPC register is read/write via a special register move instructionand the special register address and data bus.

[0252] 5.2.8. The trap state must be exited by the execution of a returnfrom trap instruction.

[0253] 5.2.8.1. If prior saved, the xPC address must be restored fromits predefined location before executing the return from trapinstruction.

[0254] 5.3. When a return from trap is executed:

[0255] 5.3.1. Interrupts are enabled.

[0256] 5.3.2. The xPC address is returned to the current instructionstream register MBUF or EBUF PFnPC, as determined from the state of theprocedure-in-progress bit, and prefetching continues from that address.

[0257] 5.3.3. The xPC address is restored to the IF_PC register throughthe new stream register.

[0258] E. Interrupt and Exception Handling

[0259] 1. Overview

[0260] Interrupts and exceptions will be processed, as long as they areenabled, regardless of whether the processor is executing from the maininstruction stream or a procedural instruction stream. Interrupts andexceptions are serviced in priority order, and persist until cleared.The starting address of a trap handler is determined as the vectornumber offset into a predefined table of trap handler addresses asdescribed below.

[0261] Interrupts and exceptions are of two basic types in the presentembodiment, those which occur synchronously with particular instructionsin the instruction stream, and those which occur asynchronously withparticular instructions in the instruction stream. The terms interrupt,exception, trap and fault are used interchangeably herein. Asynchronousinterrupts are generated by hardware, either on-chip or off-chip, whichdoes not operate synchronously with the instruction stream. For example,interrupts generated by an on-chip timer/counter are asynchronous, asare hardware interrupts and non-maskable interrupts (NMI) provided fromoff-chip. When an asynchronous interrupt occurs, the processor contextis frozen, all traps are disabled, certain processor status informationis stored, and the processor vectors to an interrupt handlercorresponding to the particular interrupt received. After the interrupthandler completes its processing, program execution continues with theinstruction following the last completed instruction in the stream whichwas executing when the interrupt occurred.

[0262] Synchronous exceptions are those that occur synchronously withinstructions in the instruction stream. These exceptions occur inrelation to particular instructions, and are held until the relevantinstruction is to be executed. In the preferred embodiments, synchronousexceptions arise during prefetch, during instruction decode, or duringinstruction execution. Prefetch exceptions include, for example, TLBmiss or other VMU exceptions. Decode exceptions arise, for example, ifthe instruction being decoded is an illegal instruction or does notmatch the current privilege level of the processor. Execution exceptionsarise due to arithmetic errors, for example, such as divide by zero.Whenever these exceptions occur, the preferred embodiments maintain themin correspondence with the particular instruction which caused theexception, until the time at which that instruction is to be retired. Atthat time, all prior completed instructions are retired, any tentativeresults from the instruction which caused the exception are flushed, asare the tentative results of any following tentatively executedinstructions. Control is then transferred to an exception handlercorresponding to the highest priority exception which occurred for thatinstruction.

[0263] Software trap instructions are detected at the IDecode stage byCF_DET 274 (FIG. 2) and are handled. similarly to both unconditionalcall instructions and other synchronous traps. That is, a target addressis calculated and prefetch continues to the then-current prefetch queue(EBUF or MBUF). At the same time, the exception is also noted incorrespondence with the instruction and is handled when the instructionis to be retired. All other types of synchronous exceptions are merelynoted and accumulated in correspondence with the particular instructionwhich caused it and are handled at execution time.

[0264] 2. Asynchronous Interrupts

[0265] Asynchronous interrupts are signaled to the PC logic unit 270over interrupt lines 292. As shown in FIG. 3, these lines are providedto the interrupt logic unit 363 in the PC logic unit 270, and comprisean NMI line, an IRQ line and a set of interrupt level lines (LVL). TheNMI line signals a non-maskable interrupt, and derives from an externalsource. It is the highest priority interrupt except for hardware reset.The IRQ line also derives from an external source, and indicates when anexternal device is requesting a hardware interrupt. The preferredembodiments permit up to 32 user-defined externally supplied hardwareinterrupts and the particular external device requesting the interruptprovides the number of the interrupt (0-31) on the interrupt level lines(LVL). The memory error line is activated by the MCU 110 to signalvarious kinds of memory errors. Other asynchronous interrupt lines (notshown) are also provided to the interrupt logic unit 363, includinglines for requesting a timer/counter interrupt, a memory I/O errorinterrupt, a machine check interrupt and a performance monitorinterrupt. Each of the asynchronous interrupts, as well as thesynchronous exceptions described below, have a correspondingpredetermined trap number associated with them, 32 of these trap numbersbeing associated with the 32 available hardware interrupt levels. Atable of these trap numbers is maintained in the interrupt logic unit363. The higher the trap number, in general, the higher the priority ofthe trap.

[0266] When one of the asynchronous interrupts is signaled to theinterrupt logic unit 363, the interrupt control unit 363 sends out aninterrupt request to the IEU 104 over INT REQ/ACK lines 340. Interruptcontrol unit 363 also sends a suspend prefetch signal to PC control unit362 over lines 343, causing the PC control unit 262 to stop prefetchinginstructions. The IEU 104 either cancels all then-executinginstructions, and flushing all tentative results, or it may allow someor all instructions to complete. In the preferred embodiments, anythen-executing instructions are canceled, thereby permitting the fastestresponse to asynchronous interrupts. In any event, the DPC in theexecution PC control unit 366 is updated to correspond to the lastinstruction which has been completed and retired, before the IEU 104acknowledges the interrupt. All other prefetched instructions in MBUF,EBUF, TBUF and IFIFO 264 are also cancelled.

[0267] Only when the IEU 104 is ready to receive instructions from aninterrupt handler does it send an interrupt acknowledge signal on INTREQ/ACK lines 340 back to the interrupt control unit 363. The interruptcontrol unit 363 then dispatches to the appropriate trap handler asdescribed below.

[0268] 3. Synchronous Exceptions

[0269] For synchronous exceptions, the interrupt control unit 363maintains a set of four internal exception bits (not shown) for eachinstruction set, one bit corresponding to each instruction in the set.The interrupt control unit 363 also maintains an indication of theparticular trap numbers, if any detected for each instruction.

[0270] If the VMU signals a TLB miss or another VMU exception while aparticular instruction set is being prefetched, this information istransmitted to the PC logic unit 270, and in particular to the interruptcontrol unit 363, over the VMU control lines 332 and 334. When theinterrupt control unit 363 receives such a signal, it signals the PCcontrol unit 362 over line 343 to suspend further prefetches. At thesame time, the interrupt control unit 363 sets the VM_Miss or VM_Excpbit, as appropriate, associated the prefetch buffer to which theinstruction set was destined. The interrupt control unit 363 then setsall four internal exception indicator bits corresponding to thatinstruction set, since none of the instructions in the set are valid,and stores the trap number for the particular exception received incorrespondence with each of the four instructions in the faultyinstruction set. The shifting and executing of instructions prior to thefaulty instruction set then continues as usual until the faulty setreaches the lowest level in the IFIFO 264.

[0271] Similarly, if other synchronous exceptions are detected duringthe shifting of an instruction through the prefetch buffers 260, theIDecode unit 262 or the IFIFO 264, this information is also transmittedto the interrupt control unit 363 which sets the internal exceptionindicator bit corresponding to the instruction generating the exceptionand stores the trap number in correspondence with that exception. Aswith prefetch synchronous exceptions, the shifting and executing ofinstructions prior to the faulty instruction then continues as usualuntil the faulty set reaches the lowest level in the IFIFO 264.

[0272] In the preferred embodiments, the only type of exception which isdetected during the shifting of an instruction through the prefetchbuffers 260, the IDecode unit 262 or the IFIFO 264 is a software trapinstruction. Software trap instructions are detected at the IDecodestage by CF_DET unit 274. While in some embodiments other forms ofsynchronous exceptions may be detected in the IDecode unit 262, it ispreferred that the detection of any other synchronous exceptions waituntil the instruction reaches the execution unit 104. This avoids thepossibility that certain exceptions, such as arising from the handlingof privileged instruction, might be signaled on the basis of a processorstate which could change before the effective in-order-execution of theinstruction. Exceptions which do not depend on the processor state, suchas illegal instruction, could be detected in the IDecode stage, buthardware is minimized if the same logic detects all pre-executionsynchronous exceptions (apart from VMU exceptions). Nor is there anytime penalty imposed by waiting until instructions reach the executionunit 104, since the handling of such exceptions is rarely time critical.

[0273] As mentioned, software trap instructions are detected at theIDecode stage by the CF_DET unit 274. The internal exception indicatorbit corresponding to that instruction in the interrupt logic unit 363 isset and the software trap number, which can be any number from 0 to 127and which is specified in an immediate mode operand field of thesoftware trap instruction, is stored in correspondence with the trapinstruction. Unlike prefetch synchronous exceptions, however, sincesoftware traps are treated as both a control flow instruction and as asynchronous exception, the interrupt control unit 363 does not signal PCcontrol unit 362 to suspend prefetches when a software trap instructionis detected. Rather, at the same time the instruction is shiftingthrough the IFIFO 264, the IFU 102 prefetches the trap handler into theMBUF instruction stream buffer.

[0274] When an instruction set reaches the lowest level of the IFIFO264, the interrupt logic unit 363 transmits the exception indicator bitsfor that instruction set as a 4-bit vector to the IEU 104 over theSYNCH_INT_INFO lines 341 to indicate which, if any, of the instructionsin the instruction set have already been determined to be the source ofa synchronous exception. The IEU 104 does not respond immediately, butrather permits all the instructions in the instruction set to bescheduled in the normal course. Further exceptions, such as integerarithmetic exceptions, may be generated during execution. Exceptionswhich depend on the current state of the machine, such as due to theexecution of a privileged instruction, are also detected at this time,and in order to ensure that the state of the machine is current withrespect to all previous instructions in the instruction stream, allinstructions which have a possibility of affecting the PSR (such asspecial move and returns from trap instructions) are forced to executein order. Only when an instruction that is the source of a synchronousexception of any sort is about to be retired, is the occurrence of theexception signaled to the interrupt logic unit 363.

[0275] The IEU 104 retires all instructions which have been tentativelyexecuted and which occur in the instruction stream prior to the firstinstruction which has a synchronous exception, and flushes the tentativeresults from any tentatively executed instructions which occursubsequently in the instruction stream. The particular instruction thatcaused the exception is also flushed since that instruction willtypically be re-executed upon return from trap. The IF_PC in theexecution PC control unit 366 is then updated to correspond to the lastinstruction actually retired, and the before any exception is signaledto the interrupt control unit 363.

[0276] When the instruction that is the source of an exception isretired, the IEU 104 returns to the interrupt logic unit 363, over theSYNCH_INT_INFO lines 341, both a new 4-bit vector indicating which, ifany, instructions in the retiring instruction set (register 224) had asynchronous exception, as well as information indicating the source ofthe first exception in the instruction set. The information in the 4-bitexception vector returned by IEU 104 is an accumulation of the 4-bitexception vectors provided to the IEU 104 by the interrupt logic unit363, as well as exceptions generated in the IEU 104. The remainder ofthe information returned from the IEU 104 to interrupt control unit 363,together with any information already stored in the interrupt controlunit 363 due to exceptions detected on prefetch or IDecode, issufficient for the interrupt control unit 363 to determine the nature ofthe highest priority synchronous exception and its trap number.

[0277] 4. Handler Dispatch and Return

[0278] After an interrupt acknowledge signal is received over lines 340from the IEU, or after a non-zero exception vector is received overlines 341, the current DPC is temporarily stored as a return address inan xPC register, which is one of the special registers 412 (FIG. 4). Thecurrent processor status register (PSR) is also stored in a previous PSR(PPSR) register, and the current compare state register (CSR) is savedin a prior compare state register (PCSR) in the special registers 412.

[0279] The address of a trap handler is calculated as a trap baseregister address plus an offset. The PC logic unit 270 maintains twobase registers for traps, both of which are part of the specialregisters 412 (FIG. 4), and both of which are initialized by specialmove instructions executed previously. For most traps, the base registerused to calculate the address of the handler is a trap base registerTBR.

[0280] The interrupt control unit 363 determines the highest priorityinterrupt or exception currently pending and, through a look-up table,determines the trap number associated therewith. This is provided over aset of INT_OFFSET lines 373 to the prefetch PC control unit 364 as anoffset to the selected base register. Advantageously, the vector addressis calculated by merely concatenating the offset bits as low-order bitsto the higher order bits obtained from the TBR register. This avoids anyneed for the delays of an adder. (As used herein, the 2^(i) bit isreferred to as the i'th order bit.) For example, if traps are numberedfrom 0 through 255, represented as an 8 bit value, the handler addressmay be calculated by concatenating the 8 bit trap number to the end of a22-bit TBR stored value. Two low-order zero bits may be appended to thetrap number to ensure that the trap handler address always occurs on aword boundary. The concatenated handler address thus constructed isprovided as one of the inputs, 373; to the prefetch selector PF_PC Sel390 (FIG. 4), and is selected as the next address from whichinstructions are to be prefetched.

[0281] The vector handler address for traps using the TBR register areall only one word apart. Thus, the instruction at the trap handleraddress must be a preliminary branch instruction to a longer traphandling routine. Certain traps require very careful handling, however,to prevent degradation of system performance. TLB traps, for example,must be executed very quickly. For this reason, the preferredembodiments include a fast trap mechanism designed to allow the callingof small trap handlers without the cost of this preliminary branch. Inaddition, fast trap handlers can be located independently in memory, inon-chip ROM, for example, to eliminate memory system penaltiesassociated with RAM locations.

[0282] In the preferred embodiments, the only traps which result in fasttraps are the VMU exceptions mentioned above. Fast traps are numberedseparately from other traps, and have a range from 0 to 7. However, theyhave the same priority as MMU exceptions. When the interrupt controlunit 363 recognizes a fast trap as the highest priority trap thenpending, it causes a fast trap base register (FTB) to be selected fromthe special registers 412 and provided on the lines 416 to be combinedwith the trap offset. The resulting vector address provided to theprefetch selector PF_PC Sel 390, via lines 373′, is then a concatenationof the high-order 22 bits from the FTB register, followed by three bitsrepresenting the fast trap number, followed by seven bits of 0's. Thus,each fast trap address is 128 bytes, or 32 words apart. When called, theprocessor branches to the starting word and may execute programs withinthe block or branch out of it. Execution of small programs, such asstandard TLB handling routines which may be implemented in 32instructions or less, is faster than ordinary traps because thepreliminary branch to the actual exception handling routine is obviated.

[0283] It should be noted that although all instructions have the samelength of 4 bytes (i.e., occupy four address locations) in the preferredembodiments, it should be noted that the fast trap mechanism is alsouseful in microprocessors whose instructions are variable in length. Inthis case, it will be appreciated that the fast trap vector addresses beseparated by enough space to accommodate at least two of the shortestinstructions available on the microprocessor, and preferably about 32average-sized instructions. Certainly, if the microprocessor includes areturn from trap instruction, the vector addresses should be separatedby at least enough space to permit that instruction to be preceded by atleast one other instruction in the handler.

[0284] Also on dispatch to a trap handler, the processor enters both akernel mode and an interrupted state. Concurrently, a copy of thecompare state register (CSR) is placed in the prior carry state register(PCSR) and a copy of the PSR is stored in the prior PSR (PPSR) register.The kernel and interrupted states modes are represented by bits in theprocessor status register (PSR). Whenever the interrupted_state bit inthe current PSR is set, the shadow registers or trap registers RT[24]through RT[31], as described above and as shown in FIG. 7B, becomevisible. The interrupt handler may switch out of kernel mode merely bywriting a new mode into the PSR, but the only way to leave theinterrupted state is by executing a return from trap (RTT) instruction.

[0285] When the IEU 104 executes an RTT instruction, PCSR is restored toCSR register and PPSR register is restored to the PSR register, therebyautomatically clearing the interrupt_state bit in the PSR register. ThePF_PC SEL selector 390 also selects special register xPC in the specialregister set 412 as the next address from which to prefetch. xPC isrestored to either the MBUF PFnPC or the EBUF PFnPC as appropriate, viaincrementor 394 and bus 396. The decision as to whether to restore xPCinto the EBUF or MBUF PFnPC is made according to the “procedure inrogress” bit of the PSR, once restored.

[0286] It should be noted that the processor does not use the samespecial register xPC to store the return address for both traps andprocedural instructions. The return address for a trap is stored in thespecial register xPC, as mentioned, but the address to return to after aprocedural instruction is stored in a different special register, uPC.Thus, the interrupted state remains available even while the processoris executing an emulation stream invoked by a procedural instruction. Onthe other hand, exception handling routines should not include anyprocedural instructions since there is no special register to store anaddress for return to the exception handler after the emulation streamis complete.

[0287] 5. Nesting

[0288] Although certain processor status information is automaticallybacked up on dispatch to a trap handler, in particular CSR, PSR, thereturn PC, and in a sense the “A” register set ra[24] through ra[31],other context information is not protected. For example, the contents ofa floating point status register (FSR) is not automatically backed up.If a trap handler intends to alter these registers, it must perform itsown backup.

[0289] Because of the limited backup which is performed automatically ona dispatch to a trap handler, nesting of traps is not automaticallypermitted. A trap handler should back up any desired registers, clearany interrupt condition, read any information necessary for handling thetrap from the system registers and process it as appropriate. Interruptsare automatically disabled upon dispatch to the trap handler. Afterprocessing, the handler can then restore the backed up registers,re-enable interrupts and execute the RTT instruction to return from theinterrupt.

[0290] If nested traps are to be allowed, the trap handler should bedivided into first and second portions. In the first portion, whileinterrupts are disabled, the xPC should be copied, using a specialregister move instruction, and pushed onto the stack maintained by thetrap handler. The address of the beginning of the second portion of thetrap handler should then be moved using the special register moveinstruction into the xPC, and a return from trap instruction (RTT)executed. The RTT removes the interrupted state (via the restoration ofPPSR into PSR) and transfers control to the address in the xPC, whichnow contains the address of the second portion of the handler. Thesecond portion may enable interrupts at this point and continue toprocess the exception in an interruptable mode. It should be noted thatthe shadow registers RT[24] through RT[31] are visible only in the firstportion of this handler, and not in the second portion. Thus, in thesecond portion, the handler should preserve any of the “A” registervalues where these register values are likely to be altered by thehandler. When the trap handling procedure is finished, it should restoreall backed up registers, pop the original xPC off the trap handler stackand move it back into the xPC special register using a special registermove instruction, and execute another RTT. This returns, control to theappropriate instruction in the main or emulation instruction stream.

[0291] 6. List of Traps

[0292] The following Table I sets forth the trap numbers, priorities andhandling modes of traps which are recognized in the preferredembodiments: TABLE I Handling Asynch/ Trap # Mode Synch Trap Name  0-127normal Synch Trap instruction 128 normal Synch FP exception 129 normalSynch Integer arithmetic exceptions 130 normal Synch MMU (except TLBmiss or modified) 135 normal Synch Unaligned memory address 136 normalSynch Illegal instruction 137 normal Synch Privileged instruction 138normal Synch Debug exception 144 normal Asynch Performance monitor 145normal Asynch Timer/Counter 146 normal Asynch Memory I/O error 160-191normal Asynch Hardware interrupt 192-253 reserved 254 normal AsynchMachine check 255 normal Asynch NMI  0 fast trap Synch Fast MMU TLB miss 1 fast trap Synch Fast MMU TBL modified 2-3 fast trap Synch Fast MMU(reserved) 4-7 fast trap Synch Fast (reserved)

[0293] III. Instruction Execution Unit

[0294] The combined control and data path portions of IEU 104 are shownin FIG. 5. The primary data path begins with the instruction/operanddata bus 124 from the IFU 102. As a data bus, immediate operands areprovided to an operand alignment unit 470 and passed on to a registerfile (REG ARRAY) 472. Register data is provided from the register file472 through a bypass unit 474, via a register file output bus 476, to aparallel array of functional computing elements (FU_(0-n)) 478 _(0-n),via a distribution bus 480. Data generated by the functional units 478_(0-n) is provided back to the bypass unit 474 or the register array472, or both, via an output bus 482.

[0295] A load/store unit 484 completes the data path portion of the IEU104. The load/store unit 484 is responsible for managing the transfer ofdata between the IEU 104 and CCU 106. Specifically, load data obtainedfrom the data cache 134 of the CCU 106 is transferred by the load/storeunit 484 to an input of the register array 472 via a load data bus 486.Data to be stored to the data cache 134 of the CCU 106 is received fromthe functional unit distribution bus 480.

[0296] The control path portion of the IEU 104 is responsible forissuing, managing, and completing the processing of information throughthe IEU data path. In the preferred embodiments of the present inventionthe IEU control path is capable of managing the concurrent execution ofmultiple instructions and the IEU data path provides for multipleindependent data transfers between essentially all data path elements ofthe IEU 104. The IEU control path operates in response to instructionsreceived via the instruction/operand bus 124. Specifically, instructionsets are received by the EDecode unit 490. In the preferred embodimentsof the present invention, the EDecode 490 receives and, decodes bothinstruction sets held by the IFIFO master registers 216, 224. Theresults of the decoding of all eight instructions is variously providedto a carry checker (CRY CHKR) unit 492, dependency checker (DEP CHKR)unit 494, register renaming unit (REG RENAME) 496, instruction issuer(ISSUER) unit 498 and retirement control unit (RETIRE CTL) 500.

[0297] The carry checker unit 492 receives decoded information about theeight pending instructions from the EDecode unit 490 via control lines502. The function of the carry checker 492 is to identify those ones ofthe pending instructions that either affect the carry bit of theprocessor status word or are dependent on the state of the carry bit.This control information is provided via control lines 504 to theinstruction issuer unit 498.

[0298] Decoded information identifying the registers of the registerfile 472 that are used by the eight pending instructions as provideddirectly to the register renaming unit 496 via control lines 506. Thisinformation is also provided to the dependency checker unit 494. Thefunction of the dependency checker unit 494 is to determine which of thepending instructions reference registers as the destination for data andwhich instructions, if any, are dependant on any of those destinationregisters. Those instructions that have register dependencies areidentified by control signals provided via the control lines 508 to theregister rename unit 496.

[0299] Finally, the EDecode unit 490 provides control informationidentifying the particular nature and function of each of the eightpending instructions to the instruction issuer unit 498 via controllines 510. The issuer unit 498 is responsible for determining the datapath resources, particularly of the availability of particularfunctional units, for the execution of pending instructions. Inaccordance with the preferred embodiments of the architecture 100,instruction issuer unit 498 allows for the out-of-order execution of anyof the eight pending instructions subject to the availability of datapath resources and carry and register dependency constraints. Theregister rename unit 496 provides the instruction issuing unit 498 witha bit map, via control lines 512 of those instructions that are suitablyunconstrained to allow execution. Instructions that have already beenexecuted (done) and those with register or carry dependencies arelogically removed from the bit map.

[0300] Depending on the availability of required functional units 478_(0-n), the instruction issuer unit 498 may initiate the execution ofmultiple instructions during each system clock cycle. The status of thefunctional units 478 _(0-n) are provided via a status bus 514 to theinstruction issuer unit 498. Control signals for initiating, andsubsequently managing the execution of instructions are provided by theinstruction issuer unit 498 on the control lines 516 to the registerrename unit 496 and selectively to the functional units 478 _(0-n). Inresponse, the register rename unit 496 provides register selectionsignals on a register file access control bus 518. The specificregisters enabled via the control signals provided on the bus 518 aredetermined by the selection of the instruction being executed and by thedetermination by the register rename unit 496 of the registersreferenced by that particular instruction.

[0301] A bypass control unit (BYPASS CTL) 520 generally controls theoperation of the bypass data routing unit 474 via control signals oncontrol lines 524. The bypass control unit 520 monitors the status ofeach of the functional units 478 _(0-n) and, in conjunction with theregister references provided from the register rename unit 496 viacontrol lines 522, determines whether data is to be routed from theregister file 472 to the functional units 478 _(0-n) or whether databeing produced by the functional units 478 _(0-n) can be immediatelyrouted via the bypass unit 474 to the functional unit distribution bus480 for use in the execution of a newly issued instruction selected bythe instruction issuer unit 498. In either case, the instruction issuerunit 498 directly controls the routing of data from the distribution bus480 to the functional units 478 _(0-n) by selectively enabling specificregister data to each of the functional units 478 _(0-n).

[0302] The remaining units of the IEU control path include a retirementcontrol unit 500, a control flow control (CF CTl) unit 528, and a donecontrol (DONE CTL) unit 540. The retirement control unit 500 operates tovoid or confirm the execution of out-of-order executed instructions.Where an instruction has been executed out-of-order, that instructioncan be confirmed or retired once all prior instructions have also beenretired. Based on an identification of which of the current set of eightpending instructions have been executed provided on the control lines532, the retirement control unit 500 provides control signals on controllines 534 coupled to the bus 518 to effectively confirm the result datastored by the register array 472 as the result of the prior execution ofan out-of-order executed instruction.

[0303] The retirement control unit 500 provides the PC increment/sizecontrol signals on control lines 344 to the IFU 102 as it retires eachinstruction. Since multiple instructions may be executed out-of-order,and therefore ready for simultaneous retirement, the retirement controlunit 500 determines a size value based on the number of instructionssimultaneously retired. Finally, where all instructions of the IFIFOmaster register 224 have been executed and retired, the retirementcontrol unit 500 provides the IFIFO read control signal on the controlline 342 to the IFU 102 to initiate an IFIFO unit 264 shift operation,thereby providing the EDecode unit 490 with an additional fourinstructions as instructions pending execution.

[0304] The control flow control unit 528 performs the somewhat morespecific function of detecting the logical branch result of eachconditional branch instruction. The control flow control unit 528receives an 8 bit vector identification of the currently pendingconditional branch instructions from the EDecode unit 490 via thecontrol lines 510. An 8 bit vector instruction done control signal issimilarly received via the control lines 532 or 542 from the donecontrol unit 540. This done control signal allows the control flowcontrol unit 528 to identify when a conditional branch instruction isdone at least to a point sufficient to determine a conditional controlflow status. The control flow status result for the pending conditionalbranch instructions are stored by the control flow control unit 528 asthey are executed. The data necessary to determine the conditionalcontrol flow instruction outcome is obtained from temporary statusregisters in the register array 472 via the control lines 530. As eachconditional control flow instruction is executed, the control flowcontrol unit provides a new control flow result signal on the controllines 348 to the IFU 102. This control flow result signal preferablyincludes two 8 bit vectors defining whether the status results, byrespective bit position, of the eight potentially pending control flowinstruction are known and the corresponding status result states, alsogiven by bit position correspondence.

[0305] Lastly, the done control unit 540 is provided to monitor theoperational execution state of each of the functional units 478 _(0-n).As any of the functional units 478 _(0-n) signal completion of aninstruction execution operation, the done control unit 540 provides acorresponding done control signal on the control lines 542 to alert theregister rename unit 496, instruction issuer unit 498, retirementcontrol unit 500 and bypass control unit 520.

[0306] The parallel array arrangement of the functional units 478 _(0-n)enhances the control consistency of the IEU 104. The particular natureof the individual functional units 478 _(0-n) must be known by theinstruction issuer unit 498 in order for instructions to be properlyrecognized and scheduled for execution. The functional units 478 _(0-n)are responsible for determining and implementing their specific controlflow operation necessary to perform their requisite function. Thus,other than the instruction issuer 498, none of the IEU control unitsneed to have independent knowledge of the control flow processing of aninstruction. Together, the instruction issuer unit 498 and thefunctional units 478 _(0-n) provide the necessary control signalprompting of the functions to be performed by the remaining control flowmanaging units 496, 500, 520, 528, 540. Thus, alteration in theparticular control flow operation of a functional unit 478 _(0-n) doesnot impact the control operation of the IEU 104. Further, the functionalaugmentation of an existing functional unit 478 _(0-n) and even theaddition of one or more new functional units 478 _(0-n) such as anextended precision floating point multiplier and extended precisionfloating point ALU, a fast fourier computation functional unit, and atrigonometric computational unit, require only minor modification of theinstruction issuer unit 498. The required modifications must provide forrecognition of the particular instruction, based on the correspondinginstruction field isolated by the EDecode unit 490, a correlation of theinstruction to the required functional unit 478 _(0-n). Control over theselection of register date, routing of data, instruction completion andretirement remain consistent with the handling of all other instructionsexecuted with respect to all other ones of the functional units 478_(0-n).

[0307] A. IEU Data Path Detail

[0308] The central element of the IEU data path is the register file472. Within the IEU data path, however, the present invention providesfor a number of parallel data paths optimized generally for specificfunctions. The two principal data paths are integer and floating point.Within each parallel data path, a portion of the register file 472 isprovided to support the data manipulations occurring within that datapath.

[0309] 1. Register File Detail

[0310] The preferred generic architecture of a data path register fileis shown in FIG. 6A. The data path register file 550 includes atemporary buffer 552, a register file array 554, an input selector 559,and an output selector 556. Data ultimately destined for the registerarray 554 is typically first received by the temporary buffer 552through a combined data input bus 558′. That is, all data directed tothe data path register file 550 is multiplexed by the input selector 559from a number of input buses 558, preferably two, onto the input bus558′. Register select and enable control signals provided on the controlbus 518 select the register location for the received data within thetemporary buffer 552. On retirement of an instruction that produced datastored in the temporary buffer, control signals again provided on thecontrol bus 518 enable the transfer of the data from the temporarybuffer 552 to a logically corresponding register within the registerfile array 554 via the data bus 560. However, prior to retirement of theinstruction, data stored in the registers of the temporary buffer 552may be utilized in the execution of subsequent instructions by routingthe temporary buffer stored data to the output data selector 556 via abypass portion of the data bus 560. The selector 556, controlled by acontrol signal provided via the control bus 518 selects between dataprovided from the registers of the temporary buffer 552 and of theregister file array 554. The resulting data is provided on the registerfile output bus 563. Also, where an executing instruction will beretired on completion, i.e., the instruction has been executed in-order,the input selector 559 can be directed to route the result data directlyto the register array 554 via bypass extension 558″.

[0311] In accordance with the preferred embodiments of the presentinvention, each data path register file 550 permits two simultaneousregister operations to occur. Thus, the input bus 558 provides for twofull register width data values to be written to the temporary buffer552. Internally, the temporary buffer 552 provides a multiplexer arraypermitting the simultaneous routing of the input data to any tworegisters within the temporary buffer 552. Similarly, internalmultiplexers allow any five registers of the temporary buffer 552 to beselected to output data onto the bus 560. The register file array 554likewise includes input and output multiplexers allowing two registersto be selected to receive, on bus 560, or five to source, via bus 562,respective data simultaneously. Finally, the register file outputselector 556 is preferably implemented to allow any five of the tenregister data values received via the buses 560, 562 to besimultaneously output on the register file output bus 563.

[0312] The register set within the temporary buffer is generally shownin FIG. 6B. The register set 552′ consists of eight single word (32 bit)registers I0RD, I1RD . . . I7RD. The register set 552′ may also be usedas a set of four double word registers I0RD, I0RD+1 (I4RD), I1RD, I1RD+1(I5RD) . . . I3RD, I3RD+1 (I7RD).

[0313] In accordance with the present invention, rather than provideduplicate registers for each of the registers within the register filearray 554, the registers in the temporary buffer register set 552 arereferenced by the register rename unit 496 based on the relativelocation of the respective instructions within the two IFIFO masterregisters 216, 224. Each instruction implemented by the architecture 100may reference for output up to two registers, or one double wordregister, for the destination of data produced by the execution of theinstruction. Typically, an instruction will reference only a singleoutput register. Thus, for an instruction two (I₂) of the eight pendinginstructions, positionally identified as shown in FIG. 6C and thatreferences a single output register, the data destination register I2RDwill be selected to receive data produced by the execution of theinstruction. Where the data produced by the instruction I₂ is used by asubsequent instruction, for example, I₅, the data stored in the I2RDregister will be transferred out via the bus 560 and the resultant datastored back to the temporary buffer 552 into the register identified asI5RD. Notably, instruction I₅ is dependent on instruction I₂.Instruction I₅ cannot be executed until the result data from I₂ isavailable. However, as can be seen, instruction I₅ can execute prior tothe retirement of instruction I₂ by obtaining its required input datafrom the instruction I₂ data location of the temporary buffer 552′.

[0314] Finally, as instruction I₂ is retired, the data from the registerI2RD is written to the register location within the register file array554 as determined by the logical position of the instruction at thepoint of retirement. That is, the retirement control unit 500 determinesthe address of the destination registers in the register file array fromthe register reference field data provided from the EDecode unit 490 onthe control lines 510. Once instructions I₀₋₃ have been retired, thevalues in I4RD-I7RD are shifted into I0RD-I3RD simultaneous with a shiftof the IFIFO unit 264.

[0315] A complication arises where instruction I₂ provides a double wordresult value. In accordance with a preferred embodiment of the presentinvention, a combination of locations I2RD and I6RD is used to store thedata resulting from instruction I₂ until that instruction is retired orotherwise cancelled. In the preferred embodiment, execution ofinstructions I₄₋₇ are held where a double word output reference by anyof the instructions I₀₋₃ is detected by the register rename unit 496.This allows the entire temporary buffer 552′ to be used as a single bankof double word registers. Once instructions I₀₋₃ have been retired, thetemporary buffer 552′ can again be used as two banks of single wordregisters. Further, the execution of any instruction I₄₋₇ is held wherea double word output register is required until the instruction has beenshifted into a corresponding I₀₋₃ location.

[0316] The logical organization of the register file array 554 is shownin FIGS. 7A and 7B. In accordance with the preferred embodiments of thepresent invention, the register file array 554 for the integer data pathconsists of 40 32-bit wide registers. This set of registers,constituting a register set “A”, is organized as a base register setra[0 . . . 23] 565, a top set of general purpose registers ra[24 . . .31] 566, and a shadow register set of eight general purpose trapregisters rt[24 . . . 31]. In normal operation, the general purposeregisters ra[0 . . . 31] 565, 566 constitutes the active “A” registerset of the register file array for the integer data path.

[0317] As shown in FIG. 7B the trap registers rt[24 . . . 31] 567 may beswapped into the active register set “A” to allow access along with theactive base set of registers ra[0 . . . 23] 565. This configuration ofthe “A” register set is selected upon the acknowledgement of aninterrupt or the execution of an exception trap handling routine. Thisstate of the register set “A” is maintained until expressly returned tothe state shown in FIG. 7A by the execution of an enable interruptsinstruction or execution of a return from trap instruction.

[0318] In the preferred embodiment of the present invention asimplemented by the architecture 100, the floating point data pathutilizes an extended precision register file array 572 as generallyshown in FIG. 8. The register file array 572 consists of 32 registers,rf[0 . . . 31], each having a width of 64 bits. The floating pointregister file 572 may also be logically referenced as a “B” set ofinteger registers rb[0 . . . 31]. In the architecture 100, this “B” setof registers is equivalent to the low-order 32 bits of each of thefloating point registers rf[0 . . . 31].

[0319] Representing a third data path, a boolean operator register set574 is provided, as shown in FIG. 9, to store the logical result ofboolean combinatorial operations. This “C” register set 574 consists of32 single bit registers, rc[0 . . . 31]. The operation of the booleanregister set 574 is unique in that the results of boolean operations canbe directed to any instruction selected register of the boolean registerset 574. This is in contrast to utilizing a single processor status wordregister that stores single bit flags for conditions such as equal, notequal, greater than and other simple boolean status values.

[0320] Both the floating point register set 572 and the boolean registerset 574 are complimented by temporary buffers architecturally identicalto the integer temporary buffer 552 shown in FIG. 6B. The essentialdifference is that the width of the temporary buffer registers isdefined to be identical to those of the complimenting register filearray 572,574; in the preferred implementation, 64 bits and one bit,respectively.

[0321] A number of additional special registers are at least logicallypresent in the register array 472. The registers that are physicallypresent in the register array 472, as shown in FIG. 7C, include a kernelstack pointer 568, processor state register (PSR) 569, previousprocessor state register (PPSR) 570, and an array of eight temporaryprocessor state registers (tPSR[0 . . . 7]) 571. The remaining specialregisters are distributed throughout various parts of the architecture100. The special address and data bus 354 is provided to select andtransfer data between the special registers and the “A” and “B” sets ofregisters. A special register move instruction is provided to select aregister from either the “A” or “B” register set, the direction oftransfer and to specify the address identifier of a special register.

[0322] The kernel stack pointer register and temporary processor stateregisters differ from the other special registers. The kernel stackpointer may be accessed through execution of a standard register toregister move instruction when in kernel state. The temporary processorstate registers are not directly accessible. Rather, this array ofregisters is used to implement an inheritance mechanism for propagatingthe value of the processor state register for use by out-of-orderexecuting instructions. The initial propagation value is that of theprocessor state register: the value provided by the last retiredinstruction. This initial value is propagated forward through thetemporary processor state registers so that any out-of-order executinginstruction has access to the value in the positionally correspondingtemporary processor state register. The specific nature of aninstruction defines the condition code bits, if any, that theinstruction is dependent on and may change. Where an instruction isunconstrained by dependencies, register or condition code as determinedby the register dependency checker unit 494 and carry dependency checker492, the instruction can be executed out-of-order. Any modification ofthe condition code bits of the processor state register are directed tothe logically corresponding temporary processor state register.Specifically, only those bits that may change are applied to the valuein the temporary processor state register and propagated to all higherorder temporary processor state registers. Consequently, everyout-of-order executed instruction executes from a processor stateregister value modified appropriately by any intervening PSR modifyinginstructions. Retirement of an instruction only transfers thecorresponding temporary processor state registers value to the PSRregister 569.

[0323] The remaining special registers are described in Table II. TABLEII Special Registers Reg Special Move R/W Description: PC R ProgramCounters: in general, PCs maintain the next address of the currentlyexecuting program instruction stream. IF_PC R/W IFU Program Counter: theIF_PC maintains the precise next execution address. PFnPCs R PrefetchProgram Counters.: the MBUF, TBUF and EBUF PFnPCs maintain the nextprefetch instruction addresses for the respective prefetch instructionstreams. uPC R/W Micro-Program Counter: maintains the address of theinstruction following a procedural instruction. This is the address ofthe first instruction to be executed upon return from a proceduralroutine. xPC R/W Interrupt/Exception Program Counter: holds the returnaddress of an interrupt or and exception. The return address is theaddress of the IF_PC at the time of the trap. TBR W Trap Base Register:base address of a vector table used for trap handling routinedispatching. Each entry is one word long. The trap number, provided byInterrupt Logic Unit 363, is used as an index into the table pointed toby this address. FTB W Fast Trap Base Register: base address of animmediate trap handling routine table. Each table entry is 32 words andis used to directly implement a trap handling routine. The trap number,provided by Interrupt Logic Unit 363, times 32 is used as an offset intothe table pointed to by this address. PBR W Procedural Base Register:base address of a vector table used for procedural routine dispatching.Each entry is one word long, aligned on four word boundaries. Theprocedure number, provided as a procedural instruction field, is used asan index into the table pointed to by this address. PSR R/W ProcessorState Register: maintains the processor status word. Status data bitsinclude: carry, overflow, zero, negative, processor mode, currentinterrupt level, procedural routine being executed, divide by 0,overflow exception, hardware function enables, procedural enable,interrupt enable. PPSR R/W Previous Processor State Register: loadedfrom the PSR on successful completion of an instruction or when aninterrupt or trap is taken. CSR R/W Compare State (Boolean) Register:the boolean register set accessible as a single word. PCSR R/W PreviousCompare State Register: loaded from the CSR on successful completion ofan instruction or when an interrupt or trap is taken.

[0324] 2. Integer Data Path Detail

[0325] The integer data path of the IEU 104, constructed in accordancewith the preferred embodiment of the present invention, is shown in FIG.10. For purposes of clarity, the many control path connections to theinteger data path 580 are not shown. Those connections are defined withrespect to FIG. 5.

[0326] Input data for the data path 580 is obtained from the alignmentunits 582, 584 and the integer load/store unit 586. Integer immediatedata values, originally provided as an instruction embedded data fieldare obtained from the operand unit 470 via a bus 588. The alignment unit582 operates to isolate the integer data value and provide the resultingvalue onto the output bus 590 to a multiplexer 592. A second input tothe multiplexer 592 is the special register address and data bus 354.

[0327] Immediate operands obtained from the instruction stream are alsoobtained from the operand unit 470 via the data bus 594. These valuesare again right justified by the alignment unit 584 before provisiononto an output bus 596.

[0328] The integer load/store unit 586 communicates bi-directionally viathe external data bus 598 with the CCU 106. Inbound data to the IEU 104is transferred by the integer load/store unit 586 onto the input databus 600 to an input latch 602. Data output from the multiplexer 592 andlatch 602 are provided on the multiplexer input buses 604, 606 of amultiplexer 608. Data from the functional unit output bus 482′ is alsoreceived by the multiplexer 608. This multiplexer 608, in the preferredembodiments of the architecture 100, provides for two simultaneous datapaths to the output multiplexer buses 610. Further, the transfer of datathrough the multiplexer 608 can be completed within each half cycle ofthe system clock. Since most instructions implemented by thearchitecture 100 utilize a single destination register, a maximum offour instructions can provide data to the temporary buffer 612 duringeach system clock cycle.

[0329] Data from the temporary buffer 612 can be transferred to aninteger register file array 614, via temporary register output buses 616or to a output multiplexer 620 via alternate temporary buffer registerbuses 618. Integer register array output buses 622 permit the transferof integer register data to the multiplexer 620. The output busesconnected to the temporary buffer 612 and integer register file array614 each permit five register values to be output simultaneously. Thatis, two instructions referencing a total of up to five source registerscan be issued simultaneously. The temporary buffer 612, register filearray 614 and multiplexer 620 allow outbound register data transfers tooccur every half system clock cycle. Thus, up to four integer andfloating point instructions may be issued during each clock cycle.

[0330] The multiplexer 620 operates to select outbound register datavalues from the register file array 614 or directly from the temporarybuffer 612. This allows out-of-order executed instructions withdependencies on prior out-of-order executed instructions to be executedby the IEU 104. This facilitates the twin goals of maximizing theexecution through-put capability of the IEU integer data path by theout-of-order execution of pending instructions while preciselysegregating out-of-order data results from data results produced byinstructions that have been executed and retired. Whenever an interruptor other exception condition occurs that requires the precise state ofthe machine to be restored, the present invention allows the data valuespresent in the temporary buffer 612 to be simply cleared. The registerfile array 614 is therefore left to contain precisely those data valuesproduced only by the execution of instructions completed and retiredprior to the occurrence of the interrupt or other exception condition.

[0331] The up to five register data values selected during each halfsystem clock cycle operation of the multiplexer 620 are provided via themultiplexer output buses 624 to an integer bypass unit 626. This bypassunit 626 is, in essence, a parallel array of multiplexers that providefor the routing of data presented at any of its inputs to any of itsoutputs. The bypass unit 626 inputs include the special registeraddressed data value or immediate integer value via the output bus 604from the multiplexer 592, the up to five register data values providedon the buses 624, the load operand data from the integer load/store unit586 via the double integer bus 600, the immediate operand value obtainedfrom the alignment unit 584 via its output bus 596, and, finally, abypass data path from the functional unit output bus 482′. This bypassdata path, and the data bus 482′, provides for the simultaneous transferof four register values per system clock cycle.

[0332] Data is output by the bypass unit 626 onto an integer bypass bus628 that is connected to the floating point data path, to two operanddata buses providing for the transfer out of up to five register datavalues simultaneously, and a store data bus 632 that is used to providedata to the integer load/store unit 586.

[0333] The functional unit distribution bus 480 is implemented throughthe operation of a router unit 634. Again, the router unit 634 isimplemented by a parallel array of multiplexers that permit fiveregister values received at its inputs to be routed to the functionalunits provided in the integer data path. Specifically, the router unit634 receives the five register data values provided via the buses 630from the bypass unit 626, the current IF_PC address value via theaddress bus 352 and the control flow offset value determined by the PCcontrol unit 362 and as provided on the lines 378′. The router unit 634may optionally receive, via the data bus 636 an operand data valuesourced from a bypass unit provided within the floating point data path.

[0334] The register data values received by the router unit 634 may betransferred onto the special register address and data bus 354 and tothe functional units 640, 642, 644. Specifically, the router unit 634 iscapable of providing up to three register operand values to each of thefunctional units 640, 642, 644 via router output buses 646, 648, 650.Consistent with the general architecture of the architecture 100, up totwo instructions could be simultaneously issued to the functional units640, 642, 644. The preferred embodiment of the present inventionprovides for three dedicated integer functional units, implementingrespectively a programmable shift function and two arithmetic logic unitfunctions.

[0335] An ALU0 functional unit 644, ALU1 functional unit 642 and shifterfunctional unit 640 provide respective output register data onto thefunctional unit bus 482′. The output data produced by the ALU0 andshifter functional unit 644, 640 are also provided onto a shared integerfunctional unit bus 650 that is coupled into the floating point datapath. A similar floating point functional unit output value data bus 652is provided from the floating point data path to the functional unitoutput bus 482′.

[0336] The ALU0 functional unit 644 is used also in the generation ofvirtual address values in support of both the prefetch operations of theIFU 102 and data operations of the integer load/store unit 586. Thevirtual address value calculated by the ALU0 functional unit 644 isprovided onto an output bus 654 that connects to both the target addressbus 346 of the IFU 102 and to the CCU 106 to provide the execution unitphysical address (EX PADDR). A latch 656 is provided to store thevirtualizing portion of the address produced by the ALU0 functional unit644. This virtualizing portion of the address is provided onto an outputbus 658 to the VMU 108.

[0337] 3. Floating Point Data Path Detail

[0338] Referring now to FIG. 11, the floating point data path 660 isshown. Initial data is again received from a number of sources includingthe immediate integer operand bus 588, immediate operand bus 594 and thespecial register address data bus 354. The final source of external datais a floating point load/store unit 662 that is coupled to the CCU 106via the external data bus 598.

[0339] The immediate integer operand is received by an alignment unit664 that functions to right justify the integer data field beforesubmission to a multiplexer 666 via an alignment output data bus 668.The multiplexer 666 also receives the special register address data bus354. Immediate operands are provided to a second alignment unit 670 forright justification before being provided on an output bus 672. Inbounddata from the floating point load/store unit 662 is received by a latch674 from a load data bus 676. Data from the multiplexer 666, latch 674and a functional unit data return bus 482″ is received on the inputs ofa multiplexer 678. The multiplexer 678 provides for selectable datapaths sufficient to allow two register data values to be written to atemporary buffer 680, via the multiplexer output buses 682, each halfcycle of the system clock. The temporary buffer 680 incorporates aregister set logically identical to the temporary buffer 552′ as shownin FIG. 6B. The temporary buffer 680 further provides for up to fiveregister data values to be read from the temporary buffer 680 to afloating point register file array 684, via data buses 686, and to anoutput multiplexer 688 via output data buses 690. The multiplexer 688also receives, via data buses 692, up to five register data values fromthe floating point register file array 684 simultaneously. Themultiplexer 688 functions to select up to five register data values forsimultaneous transfer to a bypass unit 694 via data buses 696. Thebypass unit 694 also receives the immediate operand value provided bythe alignment unit 670 via the data bus 672, the output data bus 698from the multiplexer 666, the load data bus 676 and a data bypassextension of the functional unit data return bus 482″. The bypass unit694 operates to select up to five simultaneous register operand datavalues for output onto the bypass unit output buses 700, a store databus 702 connected to the floating point load/store unit 662, and thefloating point bypass bus 636 that connects to the router unit 634 ofthe integer data path 580.

[0340] A floating point router unit 704 provides for simultaneousselectable data paths between the bypass unit output buses 700 and theinteger data path bypass bus 628 and functional unit input buses 706,708, 710 coupled to the respective functional units 712, 714, 716. Eachof the input buses 706, 708, 710, in accordance with the preferredembodiment of the architecture 100, permits the simultaneous transfer ofup to three register operand data values to each of the functional unit712, 714, 716. The output buses of these functional units 712, 714, 716are coupled to the functional unit data return bus 482″ for returningdata to the register file input multiplexer 678. The integer data pathfunctional unit output bus 650 may also be provided to connect to thefunctional unit data return bus 482″. The architecture 100 does providefor a connection of the functional unit output buses of a multiplierfunctional unit 712 and a floating point ALU 714 to be coupled via thefloating point data path functional unit bus 652 to the functional unitdata return bus 482′ of the integer data path 580.

[0341] 4. Boolean Register Data Path Detail

[0342] The boolean operations data path 720 is shown in FIG. 12. Thisdata path 720 is utilized in support of the execution of essentially twotypes of instructions. The first type is an operand comparisoninstruction where two operands, selected from the integer register sets,floating point register sets or provided as immediate operands, arecompared by subtraction in one of the ALU functional units of theinteger and floating point data paths. Comparison is performed by asubtraction operation by any of the ALU functional units 642, 644, 714,716 with the resulting sign and zero status bits being provided to acombined input selector and comparison operator unit 722. This unit 722,in response to instruction identifying control signals received from theEDecode unit 490, selects the output of an ALU functional unit 642, 644,714, 716 and combines the sign and zero bits to extract a booleancomparison result value. An output bus 723 allows the results of thecomparison operation to be transferred simultaneously to an inputmultiplexer 726 and a bypass unit 742. As in the integer and floatingpoint data paths, the bypass unit 742 is implemented as a parallel arrayof multiplexers providing multiple selectable data paths between theinputs of the bypass unit 742 to multiple outputs. The other inputs ofthe bypass unit 742 include a boolean operation result return data bus724 and two boolean operands on data buses 744. The bypass unit 742permits boolean operands representing up to two simultaneously executingboolean instructions to be transferred to a boolean operation functionalunit 746, via operand buses 748. The bypass unit 742 also permitstransfer of up to two single bit boolean operand bits (CF0, CF1) to besimultaneously provided on the control flow result control lines 750,752.

[0343] The remainder of the boolean operation data path 720 includes theinput multiplexer 726 that receives as its inputs, the comparison andthe boolean operation result values provided on the comparison resultbus 723 and a boolean result bus 724. The bus 724 permits up to twosimultaneous boolean result bits to be transferred to the multiplexer726. In addition, up to two comparison result bits may be transferredvia the bus 723 to the multiplexer 726. The multiplexer 726 permits anytwo single bits presented at the multiplexer inputs to be transferredvia the multiplexer output buses 730 to a boolean operation temporarybuffer 728 during each half cycle of the system clock. The temporarybuffer 728 is logically equivalent to the temporary buffer 552′ as shownin FIG. 6B, though differing in two significant respects. The firstrespect is that each register entry in the temporary buffer 728 consistsof a single bit. The second distinction is that only a single registeris provided for each of the eight pending instruction slots, since theresult of a boolean operation is, by definition, fully defined by asingle result bit.

[0344] The temporary buffer 728 provides up to four output operandvalues simultaneously. This allows the simultaneous execution of twoboolean instructions, each requiring access to two source registers. Thefour boolean register values may be transferred during each half cycleof the system clock onto the operand buses 736 to a multiplexer 738 orto a boolean register file array 732 via the boolean operand data buses734. The boolean register file array 732, as logically depicted in FIG.9, is a single 32 bit wide data register that permits any separatecombination of up to four single bit locations to be modified with datafrom the temporary buffer 728 and read from the boolean register filearray 732 onto the output buses 740 during each half cycle of the systemclock. The multiplexer 738 provides for any two pairs of booleanoperands received at its inputs via the buses 736, 740 to be transferredonto the operand output buses 744 to the bypass unit 742.

[0345] The boolean operation functional unit 746 is capable ofperforming a wide range of boolean operations on two source values. Inthe case of comparison instructions, the source values are a pair ofoperands obtained from any of the integer and floating point registersets and any immediate operand provided to the IEU 104, and, for aboolean instruction, any two of boolean register operands. Tables IIIand IV identify the logical comparison operations provided by thepreferred embodiment of the architecture 100. Table V identifies thedirect boolean operations provided by the preferred implementation ofthe architecture 100. The instruction condition codes and function codesspecified in the Tables III-V represent a segment of the correspondinginstructions. The instruction also provides an identification of thesource pair of operand registers and the destination boolean registerfor storage of the corresponding boolean operation result. TABLE IIIInteger Comparison Instruction Condition* Symbol Condition Code rs1greater than rs2 > 0000 rs1 greater than or > = 0001 equal to rs2 rs1less than rs2 < 0010 rs1 less than or < = 0011 equal to rs2 rs1 unequalto rs2 ! = 0100 rs1 equal to rs2 = = 0101 reserved 0110 unconditional1111

[0346] TABLE IV Floating Point Comparison Instruction Condition SymbolCond. Code rs1 greater than rs2 > 0000 rs1 greater than or equal tors2 > = 0001 rs1 less than rs2 < 0010 rs1 less than or equal to rs2 < =0011 rs1 unequal to rs2 ! = 0100 rs1 equal to rs2 = = 0101 unordered ?1000 unordered or rs1 greater than rs2 ? > 1001 unordered, rs1 greaterthan or equal to rs2 ? > = 1010 unordered or rs1 less than rs2 ? < 1011unordered, rs1 less than or equal to rs2 ? < = 1100 unordered or rs1equal to rs2 ? = 1101 reserved 1110-1111

[0347] TABLE V Boolean Operation Instruction Operation* Symbol FunctionCode 0 Zero 0000 bs1 & bs2 AND 0001 bs1 & ˜bs2 ANN2 0010 bs1 bs1 0011˜bs1 & bs2 ANN1 0100 bs2 bs2 0101 bs1 {circumflex over ( )} bs2 XOR 0110bs1 | bs2 OR 0111 ˜bs1 and ˜bs2 NOR 1000 ˜bs1 {circumflex over ( )} bs2XNOR 1001 ˜bs2 NOT2 1010 bs1 | ˜bs2 ORN2 1011 ˜bs1 NOT1 1100 ˜bs1 | bs2ORN1 1101 ˜bs1 | ˜bs2 NAND 1110 1 ONE 1111

[0348] B. Load/Store Control Unit

[0349] An exemplary load/store unit 760 is shown in FIG. 13. Althoughseparately shown in the data paths 580, 660, the load/store units 586,662 are preferably implemented as a single shared load/store unit 760.The interface from a respective data path 580, 660 is via an address bus762 and load and store data buses 764 (600, 676), 766 (632, 702).

[0350] The address utilized by the load/store unit 760 is a physicaladdress as opposed to the virtual address utilized by the IFU 102 andthe remainder of the IEU 104. While the IFU 102 operates on virtualaddresses, relying on coordination between the CCU 106 and VMU 108 toproduce a physical address, the IEU 104 requires the load/store unit 760to operate directly in a physical address mode. This requirement isnecessary to insure data integrity in the presence of out-of-orderexecuted instructions that may involve overlapping physical address dataload and store operations and in the presence of out-of-order datareturns from the CCU 106 to the load/store unit 760. In order to insuredata integrity, the load/store unit 760 buffers data provided by storeinstructions until the store instruction is retired by the IEU 104.Consequently, store data buffered by the load store unit 760 may beuniquely present only in the load/store unit 760. Load instructionsreferencing the same physical address as executed but not retired storeinstructions are delayed until the store instruction is actuallyretired. At that point the store data may be transferred to the CCU 106by the load/store unit 760 and then immediately loaded back by theexecution of a CCU data load operation.

[0351] Specifically, full physical addresses are provided from the VMU108 onto the load/store address bus 762. Load addresses are, in general,stored in load address registers 768 ₃₋₀. Store addresses are latchedinto store address registers 770 ₃₋₀. A load/store control unit 774operates in response to control signals received from the instructionissuer unit 498 in order to coordinate latching of load and storeaddresses into the registers 768 ₃₋₀, 770 ₃₋₀. The load/store controlunit 774 provides control signals on control lines 778 for latching loadaddresses and on control lines 780 for latching store addresses. Storedata is latched simultaneous with the latching of store addresses inlogically corresponding slots of the store data register set 782 ₃₋₀. A4×4×32 bit wide address comparator unit 772 is simultaneously providedwith each of the addresses in the load and store address registers 768₃₋₀, 770 ₃₋₀. The execution of a full matrix address comparison duringeach half cycle of the system clock is controlled by the load/storecontrol unit 774 via control lines 776. The existence and logicallocation of a load address that matches a store address is provided viacontrol signals returned to the load store control unit 774 via controllines 776.

[0352] Where a load address is provided from the VMU 108 and there areno pending stores, the load address is bypassed directly from the bus762 to an address selector 786 concurrent with the initiation of a CCUload operation. However, where store data is pending, the load addresswill be latched in an available load address latch 768 ₃₋₀. Upon receiptof a control signal from the retirement control unit 500, indicatingthat the corresponding store data instruction is retiring, theload/store control unit 774 initiates a CCU data transfer operation byarbitrating, via control lines 784 for access to the CCU 106. When theCCU 106 signals ready, the load/store control unit 774 directs theselector 786 to provide a CCU physical address onto the CCU PADDRaddress bus 788. This address is obtained from the corresponding storeregister 770 ₃₋₀ via the address bus 790. Data from the correspondingstore data register 782 ₃₋₀ is provided onto the CCU data bus 792.

[0353] Upon issuance of load instruction by the instruction issuer 498,the load store control unit 774 enables one of the load address latches768 ₃₋₀ to latch the requested load address. The specific latch 768 ₃₋₀selected logically corresponds to the position of the load instructionin the relevant instruction set. The instruction issuer 498 provides theload/store control unit 774 with a five bit vector identifying the loadinstruction within either of the two possible pending instruction sets.Where the comparator 772 does not identify a matching store address, theload address is routed via an address bus 794 to the selector 786 foroutput onto the CCU PADDR address bus 788. Provision of the address isperformed in concert with CCU request and ready control signals beingexchanged between the load/store control unit 774 and CCU 106. Anexecution ID value (ExID) is also prepared and issued by the load/storecontrol unit 774 to the CCU 106 in order to identify the load requestwhen the CCU 106 subsequently returns the requested data including ExIDvalue. This ID value consists of a four bit vector utilizing unique bitsto identify the respective load address latch 768 ₃₋₀ from which thecurrent load request is generated. A fifth bit is utilized to identifythe instruction set that contains the load instruction. The ID value isthus the same as the bit vector provided with the load request from theinstruction issuer unit 498.

[0354] On subsequent signal from the CCU 106 to the load/store controlunit 774 of the availability of prior requested load data, theload/store control unit 774 enables an alignment unit to receive thedata and provide it on the load data bus 764. An alignment unit 798operates to right justify the load data.

[0355] Simultaneously with the return of data from the CCU 106, theload/store control unit 774 receives the ExID value from the CCU 106.The load/store control unit 774, in turn, provides a control signal tothe instruction issuer unit 498 identifying that load data is beingprovided on the load data bus 764 and, further, returns a bit vectoridentifying the load instruction for which the load data is beingreturned.

[0356] C. IEU Control Path Detail

[0357] Referring again to FIG. 5, the operation of the IEU control pathwill now be described in detail with respect to the timing diagramprovided in FIG. 14. The timing of the execution of instructionsrepresented in FIG. 14 is exemplary of the operation of the presentinvention, and not exhaustive of execution timing permutations.

[0358] The timing diagram of FIG. 14 shows a sequence of processorsystem clock cycles, P₀₋₆. Each processor cycle begins with an internalT Cycle, T₀. There are two T cycles per processor cycle in a preferredembodiment of the present invention as provided for by the architecture100.

[0359] In processor cycle zero, the IFU 102 and the VMU 108 operate togenerate a physical address. The physical address is provided to the CCU106 and an instruction cache access operation is initiated. Where therequested instruction set is present in the instruction cache 132, aninstruction set is returned to the IFU 102 at about the mid-point ofprocessor cycle one. The IFU 102 then manages the transfer of theinstruction set through the prefetch unit 260 and IFIFO 264, whereuponthe instruction set is first presented to the IEU 104 for execution.

[0360] 1. EDecode Unit Detail

[0361] The EDecode unit 490 receives the full instruction set inparallel for decoding prior to the conclusion of processor cycle one.The EDecode unit 490, in the preferred architecture 100, is implementedas a pure combinatorial logic block that provides for the directparallel decoding of all valid instructions that are received via thebus 124. Each type of instruction recognized by the architecture 100,including the specification of the instruction, register requirementsand resource needs are identified in Table VI. TABLE VIInstruction/Specifications Instruction Control and Operand Information*Move Register to Register Logical/Arithmetic Function Code: specifiesAdd, Subtract, Multiply, Shift, etc. Destination Register Set PSR onlySource Register 1 Source Register 2 or Immediate constant value RegisterSet A/B select Move Immediate Destination Register to Register ImmediateInteger or Floating Point constant value Register Set A/B selectLoad/Store Register Operation Function Code: specifies Load or Store,use immediate value, base and immediate value, or base and offsetSource/Destination Register Base Register Index Register or Immediateconstant value Register Set A/B select Immediate Call Signed ImmediateDisplacement Control Flow Operation Function Code: specifies branch typeand triggering condition Base Register Index Register, Immediateconstant displacement value, or Trap Number Register Set A/B selectSpecial Register Move Operation Function Code: specifies move to/fromspecial/integer register Special Register Address IdentifierSource/Destination Register Register Set A/B select Convert Integer MoveOperation Function Code: specifies type of floating point to integerconversion Source/Destination Register Register Set A/B select BooleanFunctions Boolean Function Code: specifies And, Or, etc. Destinationboolean register Source Register 1 Source Register 2 Register Set A/Bselect Extended Procedure Procedure specifier: specifies address offsetfrom procedural base value Operation: value passed to procedure routineAtomic Procedure Procedure specifier: specifies address value

[0362] The EDecode unit 490 decodes each instruction of an instructionset in parallel. The resulting identification of instructions,instruction functions, register references and function requirements aremade available on the outputs of the EDecode unit 490. This informationis regenerated and latched by the EDecode unit 490 during each halfprocessor cycle until all instructions in the instruction set areretired. Thus, information regarding all eight pending instructions isconstantly maintained at the output of the EDecode unit 490. Thisinformation is presented in the form of eight element bit vectors wherethe bits or sub-fields of each vector logically correspond to thephysical location of the corresponding instruction within the twopending instruction sets. Thus, eight vectors are provided via thecontrol lines 502 to the carry checker 492, where each vector specifieswhether the corresponding instruction affects or is dependant on thecarry bit of the processor status word. Eight vectors are provided viathe control lines 510 to identify the specific nature of eachinstruction and the function unit requirements. Eight vectors areprovided via the control lines 506 specifying the register referencesused by each of the eight pending instructions. These vectors areprovided prior to the end of processor cycle one.

[0363] 2. Carry Checker Unit Detail

[0364] The carry checker unit 492 operates in parallel with thedependency check unit 494 during the data dependency phase of operationshown in FIG. 14. The carry check unit 492 is implemented in thepreferred architecture 100 as pure combinatorial logic. Thus, duringeach iteration of operation by the carry checker unit 492, all eightinstructions are considered with respect to whether they modify thecarry flag of the processor state register. This is necessary in orderto allow the out-of-order execution of instructions that depend on thestate of the carry bit as set by prior instructions. Control signalsprovided on the control lines 504 allow the carry check unit 492 toidentify the specific instructions that are dependant on the executionof prior instructions with respect to the carry flag.

[0365] In addition, the carry checker unit 492 maintains a temporarycopy of the carry bit for each of the eight pending instructions. Forthose instructions that do not modify the carry bit, the carry checkerunit 492 propagates the carry bit to the next instruction forward in theorder of the program instruction stream. Thus, an out-of-order executedinstruction that modifies the carry bit can be executed and, further, asubsequent instruction that is dependant on such an out-of-orderexecuted instruction may also be allowed to execute, though subsequentto the instruction that modifies the carry bit. Further, maintenance ofthe carry bit by the carry checker unit 492 facilitates out-of-orderexecution in that any exception occurring prior to the retirement ofthose instructions merely requires the carry checker unit 492 to clearthe internal temporary carry bit register. Consequently, the processorstatus register is unaffected by the execution of out-of-order executedinstructions. The temporary bit carry register maintained by the carrychecker unit 492 is updated upon completion of each out-of-orderexecuted instruction. Upon retirement of out-of-order executedinstructions, the carry bit corresponding to the last retiredinstruction in the program instruction stream is transferred to thecarry bit location of the processor status register.

[0366] 3. Data Dependency Checker Unit Detail

[0367] The data dependency checker unit 494 receives the eight registerreference identification vectors from the EDecode unit 490 via thecontrol lines 506. Each register reference is indicated by a five bitvalue, suitable for identifying any one of 32 registers at a time, and atwo bit value that identifies the register bank as located within the“A”, “B” or boolean register sets. The floating point register set isequivalently identified as the “B” register set. Each instruction mayhave up to three register reference fields: two source register fieldsand one destination. Although some instructions, most notably the moveregister to register instructions, may specify a destination register,an instruction bit field recognized by the EDecode unit 490 may signifythat no actual output data is to be produced. Rather, execution of theinstruction is only for the purpose of determining an alteration of thevalue of the processor status register.

[0368] The data dependency checker 494, implemented again as purecombinatorial logic in the preferred architecture 100, operates tosimultaneously determine dependencies between source register referencesof instructions subsequent in the program instruction stream anddestination register references of relatively prior instructions. A bitarray is produced by the data dependency checker 494 that identifies notonly which instructions are dependant on others, but also the registersupon which each dependency arises.

[0369] The carry and register data dependencies are identified shortlyafter the beginning of the second processor cycle.

[0370] 4. Register Rename Unit Detail

[0371] The register rename unit 496 receives the identification of theregister references of all eight pending instructions via the controllines 506, and register dependencies via the control lines 508. A matrixof eight elements is also received via the control lines 532 thatidentify those instructions within the current set of pendinginstructions that have been executed (done). From this information, theregister rename unit 496 provides an eight element array of controlsignals to the instruction issuer unit 498 via the control lines 512.The control information so provided reflects the determination made bythe register rename unit 496 as to which of the currently pendinginstructions, that have not already been executed, are now available tobe executed given the current set of identified data dependencies. Theregister rename unit 496 receives a selection control signal via thelines 516 that identifies up to six instructions that are to besimultaneously issued for execution: two integer, two floating point andtwo boolean.

[0372] The register rename unit 496 performs the additional function ofselecting, via control signals provided on the bus 518 to the registerfile array 472, the source registers for access in the execution of theidentified instructions. Destination registers for out-of-order executedinstructions are selected as being in the temporary buffers 612, 680,728 of the corresponding data path. In-order executed instructions areretired on completion with result data being stored through to theregister files 614, 684, 732. The selection of source registers dependson whether the register has been prior selected as a destination and thecorresponding prior instruction has not yet been retired. In such aninstance, the source register is selected from the correspondingtemporary buffer 612,680,728. Where the prior instruction has beenretired, then the register of the corresponding register file614,684,732 is selected. Consequently, the register rename unit 496operates to effectively substitute temporary buffer register referencesfor register file register references in the case of out-of-orderexecuted instructions.

[0373] As implemented in the architecture 100, the temporary buffers612, 680, 728 are not duplicate register structures of theircorresponding register file arrays. Rather, a single destinationregister slot is provided for each of eight pending instructions.Consequently, the substitution of a temporary buffer destinationregister reference is determined by the location of the correspondinginstruction within the pending register sets. A subsequent sourceregister reference is identified by the data dependency checker 494 withrespect to the instruction from which the source dependency occurs.Therefore, a destination slot in the temporary buffer register isreadily determinable by the register rename unit 496.

[0374] 5. Instruction Issuer Unit Detail

[0375] The instruction issuer unit 498 determines the set ofinstructions that can be issued, based on the output of the registerrename unit 496 and the function requirements of the instructions asidentified by the EDecode unit 490. The instruction issuer unit 498makes this determination based on the status of each of the functionalunits 478 _(0-n) as reported via control lines 514. Thus, theinstruction issuer unit 498 begins operation upon receipt of theavailable set of instructions to issue from the register rename unit496. Given that a register file access is required for the execution ofeach instruction, the instruction issuer unit 498 anticipates theavailability of functional unit 478 _(0-n) that may be currentlyexecuting an instruction. In order to minimize the delay in identifyingthe instructions to be issued to the register rename unit 496, theinstruction issuer unit 498 is implemented in dedicated combinatoriallogic.

[0376] Upon identification of the instructions to issue, the registerrename unit 496 initiates a register file access that continues to theend of the third processor cycle, P₂. At the beginning of processorcycle P₃, the instruction issuer unit 498 initiates operation by one ormore of the functional units 478 _(0-n), such as shown as “Execute 0”,to receive and process source data provided from the register file array472.

[0377] Typically, most instructions processed by the architecture 100are executed through a functional unit in a single processor cycle.However, some instructions require multiple processor cycles tocomplete, such as shown as “Execute 1”, a simultaneously issuedinstruction. The Execute zero and Execute 1 instructions may, forexample, be executed by an ALU and floating point multiplier functionalunits respectively. The ALU functional unit, as shown is FIG. 14,produces output data within one processor cycle and, by simple provisionof output latching, available for use in executing another instructionduring the fifth processor cycle, P₄. The floating point multiplyfunctional unit is preferably an internally pipelined functional unit.Therefore, another additional floating point multiply instruction can beissued in the next processor cycle. However, the result of the firstinstruction will not be available for a data dependant number ofprocessor cycles; the instruction shown in FIG. 14 requires threeprocessor cycles to complete processing through the functional unit.

[0378] During each processor cycle, the function of the instructionissuer unit 498 is repeated. Consequently, the status of the current setof pending instructions as well as the availability state of the fullset of functional units 478 _(0-n) are reevaluated during each processorcycle. Under optimum conditions, the preferred architecture 100 istherefore capable of executing up to six instructions per processorcycle. However, a typical instruction mix will result in an overallaverage execution of 1.5 to 2.0 instructions per processor cycle.

[0379] A final consideration in the function of the instruction issuer498 is its participation in the handling of traps conditions and theexecution of specific instructions. The occurrence of a trap conditionrequires that the IEU 104 be cleared of all instructions that have notyet been retired. Such a circumstance may arise in response to anexternally received interrupt that is relayed to the IEU 104 via theinterrupt request/acknowledge control line 340, from any of thefunctional units 478 _(0-n) in response to an arithmetic fault, or, forexample, the EDecode unit 490 upon the decoding of an illegalinstruction. On the occurrence of the trap condition, the instructionissuer unit 498 is responsible for halting or voiding all unretiredinstructions currently pending in the IEU 104. All instructions thatcannot be retired simultaneously will be voided. This result isessential to maintain the preciseness of the occurrence of the interruptwith respect to the conventional in-order execution of a programinstruction stream. Once the IEU 104 is ready to begin execution of thetrap handling program routine, the instruction issuer 498 acknowledgesthe interrupt via a return control signal along the control lines 340.Also, in order to avoid the possibility that an exception conditionrelative to one instruction may be recognized based on a processor statebit which would have changed before that instruction would have executedin a classical pure in-order routine, the instruction issuer 498 isresponsible for ensuring that all instructions which can alter the PSR(such as special move and return from trap) are executed strictlyin-order.

[0380] Certain instructions that alter program control flow are notidentified by the IDecode unit 262. Instructions of this type includesubroutine returns, returns from procedural instructions, and returnsfrom traps. The instruction issuer unit 498 provides identifying controlsignals via the IEU return control lines 350 to the IFU 102. Acorresponding one of the special registers 412 is selected to providethe IF_PC execution address that existed at the point in time of thecall instruction, occurrence of the trap or encountering of a proceduralinstruction.

[0381] 6. Done Control Unit Detail

[0382] The done control unit 540 monitors the functional units 478_(0-n) for the completion status of their current operations. In thepreferred architecture 100, the done control unit 540 anticipates thecompletion of operations by each functional unit sufficient to provide acompletion vector, reflecting the status of the execution of eachinstruction in the currently pending set of instructions, to theregister rename unit 496, bypass control unit 520 and retirement controlunit 500 approximately one half processor cycle prior to the executioncompletion of an instruction by a functional unit 478 _(0-n). Thisallows the instruction issuer unit 498, via the register rename unit496, to consider the instruction completing functional units asavailable resources for the next instruction issuing cycle. The bypasscontrol unit 520 is allowed to prepare to bypass data output by thefunctional unit through the bypass unit 474. Finally, the retirementcontrol unit 500 may operate to retire the corresponding instructionsimultaneous with the transfer of data from the functional unit 478_(0-n) to the register file array 472.

[0383] 7. Retirement Control Unit Detail

[0384] In addition to the instruction done vector provided from the donecontrol unit 540, the retirement control unit 500 monitors the oldestinstruction set output from the EDecode output 490. As each instructionin instruction stream order is marked done by the done control unit 540,the retirement control unit 500 directs, via control signals provided oncontrol lines 534, the transfer of data from the temporary buffer slotto the corresponding instruction specified register file registerlocation within the register file array 472. The PC Inc/Size controlsignals are provided on the control lines 344 for each one or moreinstruction simultaneously retired. Up to four instructions may beretired per processor cycle. Whenever an entire instruction set has beenretired, an IFIFO read control signal is provided on the control line342 to advance the IFIFO 264.

[0385] 8. Control Flow Control Unit Detail

[0386] The control flow control unit 528 operates to continuouslyprovide the IFU 102 with information specifying whether any control flowinstructions within the current set of pending instructions have beenresolved and, further, whether the branch result is taken or not taken.The control flow control unit 528 obtains, via control lines 510, anidentification of the control flow branch instructions by the EDecode490. The current set of register dependencies is provided via controllines 536 from the data dependency checker unit 494 to the control flowcontrol unit 528 to allow the control flow control unit 528 to determinewhether the outcome of a branch instruction is constrained bydependencies or is now known. The register references provided via bus518 from the register rename unit 496 are monitored by the control flowcontrol 528 to identify the boolean register that will define the branchdecision. Thus, the branch decision may be determined even prior to theout-of-order execution of the control flow instruction.

[0387] Simultaneous with the execution of a control flow instruction,the bypass unit 472 is directed by the bypass control unit 520 toprovide the control flow results onto control lines 530, consisting ofthe control flow zero and control flow one 1 control lines 750, 752, tothe control flow control unit 528. Finally, the control flow controlunit 528 continuously provides two vectors of eight bits each to the IFU102 via control lines 348. These vectors define whether a branchinstruction at the corresponding logical location corresponding to thebits within the vectors have been resolved and whether the branch resultis taken or not taken.

[0388] In the preferred architecture 100, the control flow control unit528 is implemented as pure combinatorial logic operating continuously inresponse to the input control signals to the control unit 528.

[0389] 9. Bypass Control Unit Detail

[0390] The instruction issuer unit 498 operates closely in conjunctionwith the bypass control unit 520 to control the routing of data betweenthe register file array 472 and the functional units 478 _(0-n). Thebypass control unit 520 operates in conjunction with the register fileaccess, output and store phases of operation shown in FIG. 14. During aregister file access, the bypass control unit 520 may recognize, viacontrol lines 522, an access of a destination register within theregister file array 472 that is in the process of being written duringthe output phase of execution of an instruction. In this case, thebypass control unit 520 directs the selection of data provided on thefunctional unit output bus 482 to be bypassed back to the functionalunit distribution bus 480. Control over the bypass unit 520 is providedby the instruction issuer unit 498 via control lines 532.

[0391] IV. Virtual Memory Control Unit

[0392] An interface definition for the VMU 108 is provided in FIG. 15.The VMU 108 consists principally of a VMU control logic unit 800 and acontent addressable memory (CAM) 802. The general function of the VMU108 is shown graphically in FIG. 16. There, a representation of avirtual address is shown partitioned into a space identifier(sID[31:28]), a virtual page number (VADDR[27:14]), page offset(PADDR[13:4]), and a request ID (rID[3:0]). The algorithm for generatinga physical address is to use the space ID to select one of 16 registerswithin a space table 842. The contents of the selected space register incombination with a virtual page number is used as an address foraccessing a table look aside buffer (TLB) 844. The 34 bit addressoperates as a content address tag used to identify a correspondingbuffer register within the buffer 844. On the occurrence of a tag match,an 18 bit wide register value is provided as the high order 18 bits of aphysical address 846. The page offset and request ID are provided as thelow order 14 bits of the physical address 846.

[0393] Where there is a tag miss in the table look aside buffer 844, aVMU miss is signaled. This requires the execution of a VMU fast traphandling routine that implements conventional hash algorithm 848 thataccesses a complete page table data structure maintained in the MAU 112.This page table 850 contains entries for all memory pages currently inuse by the architecture 100. The hash algorithm 848 identifies thoseentries in the page table 850 necessary to satisfy the current virtualpage translation operation. Those page table entries are loaded from theMAU 112 to the trap registers of register set “A” and then transferredby special register move instructions to the table look aside buffer844. Upon return from the exception handling routine, the instructiongiving rise to the VMU miss exception is re-executed by the IEU 104. Thevirtual to physical address translation operation should then completewithout exception.

[0394] The VMU control logic 800 provides a dual interface to both theIFU 102 and IEU 104. A ready signal is provided on control lines 822 tothe IEU 104 to signify that the VMU 108 is available for an addresstranslation. In the preferred embodiment, the VMU 108 is always ready toaccept IFU 120 translation requests. Both the IFU and IEU 102, 104 maypose requests via control line 328, 804. In the preferred architecture100, the IFU 102 has priority access to the VMU 108. Consequently, onlya single busy control line 820 is provided to the IEU 104.

[0395] Both the IFU and IEU 102, 104 provide the space ID and virtualpage number fields to the VMU control logic 800 via control lines 326,808, respectively. In addition, the IEU 104 provides a read/writecontrol signal via control signal 806 to define whether the address isto be used for a load or store operation as necessary to modify memoryaccess protection attributes of the virtual memory referenced. The spaceID and virtual page fields of the virtual address are passed to the CAMunit 802 to perform the actual translation operation. The page offsetand ExID fields are eventually provided by the IEU 104 directly to theCCU 106. The physical page and request ID fields are provided on theaddress lines 836 to the CAM unit 802. The occurrence of a table lookaside buffer match is signalled via the hit line and control outputlines 830 to the VMU control logic unit 800. The resulting physicaladdress, 18 bits in length, is provided on the address output lines 824.

[0396] The VMU control logic unit 800 generates the virtual memory missand virtual memory exception control signals on lines 334, 332 inresponse to the hit and control output control signals on lines 830. Avirtual memory translation miss is defined as failure to match a pagetable identifier in the table look aside buffer 844. All othertranslation errors are reported as virtual memory exceptions.

[0397] Finally, the data tables within the CAM unit 802 may be modifiedthrough the execution of special register to register move instructionsby the IEU 104. Read/write, register select, reset, load and clearcontrol signals are provided by the IEU 104 via control lines 810, 812,814, 816, 818. Data to be written to the CAM unit registers is receivedby the VMU control logic unit 800 via the address bus 808 coupled to thespecial address data bus 354 from the IEU 104. This data is transferredvia bus 836 to the CAM unit 802 simultaneous with control signals 828that control the initialization, register selection, and read or writecontrol signal. Consequently, the data registers within the CAM unit 802may be readily written as required during the dynamic operation of thearchitecture 100 including read out for storage as required for thehandling of context switches defined by a higher level operating system.

[0398] V. Cache Control Unit

[0399] The control on data interface for the CCU 106 is shown in FIG.17. Again, separate interfaces are provided for the IFU 102 and IEU 104.Further, logically separate interfaces are provided by the CCU 106 tothe MCU 110 with respect to instruction and data transfers.

[0400] The IFU interface consists of the physical page address providedon address lines 324, the VMU converted page address as provided on theaddress lines 824, and request IDs as transferred separately on controllines 294, 296. A unidirectional data transfer bus 114 is provided totransfer an entire instruction set in parallel to the IFU 102. Finally,the read/busy and ready control signals are provided to the CCU 106 viacontrol lines 298, 300, 302.

[0401] Similarly, a complete physical address is provided by the IEU 102via the physical address bus 788. The request ExIDs are separatelyprovided from and to the load/store unit of the IEU 104 via controllines 796. An 80 bit wide bidirectional data bus is provided by the CCU106 to the IEU 104. However, in the present preferred implementation ofthe architecture 100, only the lower 64 bits are utilized by the IEU104. The availability and support within the CCU 106 of a full 80 bitdata transfer bus is provided to support subsequent implementations ofthe architecture 100 that support, through modifications of the floatingpoint data path 660, floating point operation in accordance with IEEEstandard 754.

[0402] The IEU control interface, established via request, busy, ready,read/write and with control signals 784 is substantially the same as thecorresponding control signals utilized by the IFU 102. The exceptionbeing the provision of a read/write control signal to differentiatebetween load and store operations. The width control signals specify thenumber of bytes being transferred during each CCU 106 access by the IEU104; in contrast every access of the instruction cache 132 is a fixed128 bit wide data fetch operation.

[0403] The CCU 106 implements a substantially conventional cachecontroller function with respect to the separate instruction and datacaches 132, 134. In the preferred architecture 100, the instructioncache 132 is a high speed memory providing for the storage of 256 128bit wide instruction sets. The data cache 134 provides for the storageof 1024 32 bit wide words of data. Instruction and data requests thatcannot be immediately satisfied from the contents of the instruction anddata caches 132, 134 are passed on to the MCU 110. For instruction cachemisses, the 28 bit wide physical address is provided to the MCU 110 viathe address bus 860. The request ID and additional control signals forcoordinating the operation of the CCU 106 and MCU 110 are provided oncontrol lines 862. Once the MCU 110 has coordinated the necessary readaccess of the MAU 112, two consecutive 64 bit wide data transfers areperformed directly from the MAU 112 through to the instruction cache132. Two transfers are required given that the data bus 136 is, in thepreferred architecture 100, a 64 bit wide bus. As the requested data isreturned through the MCU 110 the request ID maintained during thependency of the request operation is also returned to the CCU 106 viathe control lines 862.

[0404] Data transfer operations between the data cache 134 and MCU 110are substantially the same as instruction cache operations. Since dataload and store operations may reference a single byte, a full 32 bitwide physical address is provided to the MCU 110 via the address bus864. Interface control signals and the request ExID are transferred viacontrol lines 866. Bidirectional 64 bit wide data transfers are providedvia the data cache bus 138.

[0405] VI. Summary/Conclusion

[0406] Thus, a high-performance RISC based microprocessor architecturehas been disclosed. The architecture efficiently implements out-of-orderexecution of instructions, separate main and target instruction streamprefetch instruction transfer paths, and a procedural instructionrecognition and dedicated prefetch path. The optimized instructionexecution unit provides multiple optimized data processing pathssupporting integer, floating point and boolean operations andincorporates respective temporary register files facilitatingout-of-order execution and instruction cancellation while maintaining areadily established precise state-of-the-machine status.

[0407] It is therefore to be understood that while the foregoingdisclosure describes the preferred embodiment of the present invention,other variations and modifications may be readily made by those ofaverage skill within the scope of the present invention.

What is claimed is:
 1. A microprocessor for executing instructionsobtained from an instruction store, said microprocessor comprising: a)means for fetching instruction sets from an instruction store, eachinstruction set including an instruction; b) means, coupled to saidfetching means, for buffering instruction sets, said buffering meansincluding a first buffer and a second buffer; and c) means, coupled tosaid first and second buffers, for executing instructions, saidexecuting means including register file means for storing data in aplurality of registers, a plurality of functional unit means forprocessing data wherein each said functional unit means processes datain a predetermined manner, bus means for providing plural data routingpaths between said register file means and said plurality of functionalunit means, and means for controlling the execution of instructions. 2.The microprocessor of claim 1 wherein said controlling means is coupledto said first and second buffers for examining the instructions withinthe instruction sets buffered therein, said controlling means includingmeans for selecting an instruction to be executed, means for selectinginstruction determined ones of said plurality of registers for thetransfer of data and instruction determined ones of said plurality offunctional unit means for the processing of data.
 3. The microprocessorof claim 2 wherein said controlling means directs the operation of saidbus means to transfer data between said instruction determined one ofsaid plurality of registers and said instruction determined ones of saidplurality of functional unit means.
 4. The microprocessor of claim 1, 2,or 3 wherein said controlling means provides for the concurrentexecution of instructions, said controlling means controlling theinitiation of the execution of instructions based on the availability ofsaid functional unit means for the processing of data.
 5. Amicroprocessor comprising: a) means for obtaining a predeterminedsequence of instructions to be executed, wherein an instruction of saidpredetermined sequence of instructions includes a register reference; b)means for storing respective data in a plurality of registers includinga predetermined register and a temporary register; and c) means, coupledto said obtaining means, for sequentially executing said predeterminedsequence of instructions, said executing means including means fordirecting the storage of data by an a-sequentially executed instructionto said temporary register where the register referenced by saida-sequentially executed instruction is said predetermined register.
 6. Amicroprocessor comprising: a) means for storing data in a plurality ofregisters identifiable by register references, said plurality ofregisters including a predetermined register and a temporary register;b) means for obtaining a predetermined sequence of instructions to beexecuted, wherein an instruction of said predetermined sequence ofinstructions includes a register reference; c) executing means, coupledto said obtaining means, for a-sequentially executing said predeterminedsequence of instructions, said executing means including means, coupledto said storing means, for selecting saied temporary register where thesequential execution of said instruction provides said registerreference to select said predetermined register for the storage of data.7. The microprocessor of claim 6 wherein said executing means furtherincludes means for determining whether all instructions in saidpredetermined sequence of instructions prior to said instruction havebeen executed and means, responsive to said determining means andcoupled to said storing means, for transferring the data stored by saidtemporary register to said predetermined register.